copyOnWriteArray 记录一下 add的时候枷锁,先复制,后赋值;get的时候并没有加锁,(导致多线程的时候可能get不到最近的值) ...
分类:
编程语言 时间:
2018-05-19 20:35:09
阅读次数:
191
Java并发包中Lock的实现原理 1. Lock 的简介及使用 Lock是java 1.5中引入的线程同步工具,它主要用于多线程下共享资源的控制。本质上Lock仅仅是一个接口(位于源码包中的java\util\concurrent\locks中),它包含以下方法 //尝试获取锁,获取成功则返回,否 ...
分类:
编程语言 时间:
2018-05-18 13:54:18
阅读次数:
238
1类签名与简介 LinkedBlockingQueue是Java并发包的成员,该类基于链表实现了阻塞队列。 基于链表的队列通常比基于数组的队列有更高的吞吐量,但是在大多数并发程序中可预测性能较低。(本质是理解链表和数组各自的性能优势) LinkedBlockingQueue的容量在未指定的情况下是I ...
分类:
数据库 时间:
2018-05-14 17:35:12
阅读次数:
189
这一节来讲一讲java.util.concurrent这个包里的一些重要的线程安全有关类。 synchronized容器 synchronized容器就是把自己的内部状态封装起来,通过把每一个public方法设置成同步来控制对共享变量的访问的容器。主要包括Vector, Hashtable,以及Co ...
分类:
其他好文 时间:
2018-04-29 22:13:33
阅读次数:
141
jdk1.6以后提供了java并发包。 volatile与内存可见性: 例子: 结果: 结论: main()线程读取到的td.isFlag并不是true。 这就涉及到了内存可见性问题。 具体原因: 重排序:代码书写的顺序与实际执行的顺序不同。 1. 编译器重排序 2. 指令重排序 3. 内存系统重排 ...
分类:
其他好文 时间:
2018-04-29 18:42:29
阅读次数:
171
Java多线程 JDK并发包(2) 线程池 在使用线程池后,创建线程变成了从线程池里获得空闲线程,关闭线程变成了将线程归坏给线程池。 JDK有一套Executor框架,大概包括Executor、ExecutorService、AbstractExeccutorService、ThreadPoolEx ...
分类:
编程语言 时间:
2018-04-26 18:25:39
阅读次数:
179
1.集合包 集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Value形式的键值对。 Collection中最常用的又分为两种类型的接口:List和Set,两者最明显的差别为List支持放入重复的元素,而Set不支持。 Li ...
分类:
编程语言 时间:
2018-04-20 18:53:17
阅读次数:
208
一、HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHash ...
分类:
其他好文 时间:
2018-04-17 20:56:29
阅读次数:
189
ReentrantLock在进行实例化时,可以通过构造函数的参数选择是否使用公平锁FairSync或者非公平锁NonfairSync,两者的区别比较简单,如果是公平锁则新来的线程会先检测同步队列中是否有等待的线程,如果有,则追加到同步队列尾,锁竞争过程强调的是有序进行,当然代价比较明显,线程切换会造 ...
分类:
其他好文 时间:
2018-04-13 17:49:24
阅读次数:
202
HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMa ...
分类:
其他好文 时间:
2018-04-11 15:42:29
阅读次数:
180