synchronized

转:java中Vector的使用

微笑、不失礼 提交于 2019-12-26 18:19:59
转:https://www.cnblogs.com/zhaoyan001/p/6077492.html Vector 可实现自动增长的对象数组。 java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量。比如在c,c++中所谓的“动态数组”一般都由指针来实现。为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用。 创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况。可以考虑使用向量类。 向量类提供了三种构造方法: public vector() public vector(int initialcapacity,int capacityIncrement) public vector(int initialcapacity) 使用第一种方法系统会自动对向量进行管理。若使用后两种方法,则系统将根据参数,initialcapacity设定向量对象的容量(即向量对象可存储数据的大小)

多线程与Android线程性能优化

假装没事ソ 提交于 2019-12-26 17:17:38
目录 多线程与Android线程性能优化 基础概念 CPU核心数和线程数的关系 CPU时间片轮转机制 什么是进程和线程 澄清并行和并发 高并发编程的意义、好处和注意事项 认识Java里的线程 线程的启动与中止 对Java里的线程再多一点点认识 深入理解run()和start() 其他的线程方法 线程间的共享和协作 线程间的协作 ThreadLocal 显式锁 Lock接口和synchronized的比较 Lock接口和核心方法 可重入锁ReentrantLock、所谓锁的公平和非公平 读写锁ReentrantReadWriteLock Condition接口 多线程与Android线程性能优化 基础概念 CPU核心数和线程数的关系 多核心:也指单芯片多处理器( Chip Multiprocessors,简称CMP),CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。这种依靠多个CPU同时并行地运行程序是实现超高速计算的一个重要方向,称为并行处理 多线程: Simultaneous Multithreading.简称SMT.SMT可通过复制处理器上的结构状态,让同一个处理器上的多个线程同步执行并共享处理器的执行资源可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或

JDK源码学习笔记1-AbstractMap

家住魔仙堡 提交于 2019-12-25 19:59:35
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> AbstractMap这个 类 主要是为了减轻实现Map接口的任务而设计的,这样一些简单通用的方法就不用各种Map自己一一实现了。 在看这个类的时候,我发现了2个地方是我需要学习的: 1、根据需要,一个方法可以写成只抛出一个异常 public V put(K key, V value) { throw new UnsupportedOperationException(); } AbstractMap 实现 了Map接口,因此必须要有put()方法,而像我的话可能方法中直接就什么都不写了。但显然源码中技高一筹,就只抛出个异常, 这样继承AbstractMap的子类如果没有自己实现put()方法就会抛出这个异常,告诉编码者需要自己去实现这个方法,而不是什么反应都没有了。虽然是很小的细节,但对以后可能出现的问题做了预防,很值得学习。 2、transient和volatile关键词的使用 transient volatile Set<K> keySet = null; transient volatile Collection<V> values = null; 下面给出网络上找到的对这两个关键词的解释: transient是 变量 修饰符 ,表明该字段不是对象持久状态的一部分,储存的时候不用储存,比如 序列化

向量类Vector

◇◆丶佛笑我妖孽 提交于 2019-12-25 18:18:06
Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java语言中。正如在一开始就提到过,是没有指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C++中所谓“动态数组”一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。事实上,灵活使用数组也可完成向量类的功能,但向量类中提供的大量方法大大方便了用户的使用。 创建了一个向量类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型也不需预先选定向量的容量,并可方便地进行查找。对于预先不知或不愿预先定义数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用向量类。 向量类提供了三种构造方法: public vector() public vector(int initialcapacity,int capacityIncrement) public vector(int initialcapacity) 使用第一种方法,系统会自动对向量对象进行管理。若使用后两种方法,则系统将根据参数initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时,系统会扩充向量对象的存储容量。参数capacityIncrement给定了每次扩充的扩充值

synchronized Lock用法

孤者浪人 提交于 2019-12-25 12:43:20
在介绍Lock与synchronized时,先介绍下Lock: public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException; void unlock(); Condition newCondition(); } 如上可知,Lock是一个接口,synchronized是Java内置的关键字。 Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。 下面是我的另一篇关于缓存的实现,使用ReadWriteLock实现,如下: package com.charles.utils; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReentrantReadWriteLock; public class CharlesCache { private Map

Java多线程之间的通信

放肆的年华 提交于 2019-12-25 06:53:36
目录: 1 synchronized的作用域 2 线程的状态及线程类的一些常用方法: 3 一个简单多线程通信的例子: 1 synchronized的作用域: 假设存在如下条件:2个线程(ThreadOne and ThreadTwo),1个类(TestObject), 3个TestObject的实例(object, object1 and object2). 构造函数如下: ThreadOne threadOne = new ThreadOne(object1) ThreadTwo threadTwo = new ThreadTwo(object2) TestObject testObject = new TestObject ("object") TestObject.java String getName(); void setName(); 现在我们分作用域为: 实例内,整个对象,代码块,子类 实例内:只有一个实例的情况下(设ThreadOne和ThreadTwo都是通过object来构造的,TestObject的2个方法均由synchronized修饰) ,当ThreadOne在调用getName()的时候,ThreadTwo是没有权利调用object这个实例的所有用synchronized方法。 即对这个实例object上锁了

How to refresh/Synch View based on a Query with dynamic range?

和自甴很熟 提交于 2019-12-25 05:36:14
问题 I have a simple View with a Query , my custom Query has a Dynamically Range . In class SysQueryRangeUtil I have insered a my custom public static method and copy it in my Custom Query. This range, work well. But I have a problem, when the range condition change, if I want to see the new view(with new selected record) I have to Synch, in AOT my View. But this operation can't do a simple SystemUser. There is a way to use a dynamic range in a View and not constantly synchronize ? My dynamic

Java编程的逻辑 (71) - 显式锁

依然范特西╮ 提交于 2019-12-25 02:08:46
​ 本系列文章经补充和完善,已修订整理成书《Java编程的逻辑》,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接 : http://item.jd.com/12299018.html 在 66节 ,我们介绍了利用synchronized实现锁,我们提到了synchronized的一些局限性,本节,我们探讨Java并发包中的显式锁,它可以解决synchronized的限制。 Java并发包中的显式锁接口和类位于包java.util.concurrent.locks下,主要接口和类有: 锁接口Lock,主要实现类是ReentrantLock 读写锁接口ReadWriteLock,主要实现类是ReentrantReadWriteLock 本节主要介绍接口Lock和实现类ReentrantLock,关于读写锁,我们后续章节介绍。 接口Lock 显式锁接口Lock的定义为: public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException

java多线程与并发(基础篇)

孤街醉人 提交于 2019-12-24 19:06:31
一、进程与线程 进程 :是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程 :是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的 资源。 虽然系统是把资源分给进程,但是CPU很特殊,是被分配到线程的,所以线程是CPU分配的基本单位。 二者关系: 一个进程中有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈区域。 程序计数器 :是一块内存区域,用来记录线程当前要执行的指令地址 。 栈 :用于存储该线程的局部变量,这些局部变量是该线程私有的,除此之外还用来存放线程的调用栈祯。 堆 :是一个进程中最大的一块内存,堆是被进程中的所有线程共享的。 方法区 :则用来存放 NM 加载的类、常量及静态变量等信息,也是线程共享的 。 二者区别: 进程 :有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响。 线程 :是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。 1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 2) 线程的划分尺度小于进程,使得多线程程序的并发性高。 3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 4) 每个独立的线程有一个程序运行的入口

How can a synchronized iteration on a Set fail with a ConcurrentModificationException [duplicate]

橙三吉。 提交于 2019-12-24 15:42:57
问题 This question already has answers here : ConcurrentModificationException (Java) (3 answers) Closed 6 years ago . I have a class which stores data and gets called from many threads. It fails with a ConcurrentModificationException although every access to my Set is synchronized. How can this happen? The synchronized should make sure that my Set is not changed while it is iterated... Here are all functions from my class that access the Set ... Can anyone tell me what is going wrong here? private