随笔分类 -  Java并发编程

摘要:线程的状态 线程被创建时,属于新建状态,调用start后进入就绪状态 就绪状态被cpu调用时,进入运行状态 运行状态在调用sleep、wait、join后会进入阻塞状态 运行状态执行完成后会进入死亡状态,这里包括正常执行完毕和异常执行完毕 运行状态在os切换时,线程会进入就绪状态 线程wait进入阻 阅读全文
posted @ 2017-04-17 22:56 风过无痕的博客 阅读(402) 评论(0) 推荐(1) 编辑
摘要:很早就接触了volatile,但是并没有特别深入的去研究她,只有一个朦胧的概念,就是觉得 用她来解决可见性的,但可见性又是什么呢? 最近经过查阅各种资料,并结合自己的思考和实践,对volatile有了比较深刻的认识, 在此总结并分享给大家。 可见性 如何理解可见性,还是来看个会出现死循环的例子: ( 阅读全文
posted @ 2017-03-13 10:20 风过无痕的博客 阅读(18373) 评论(14) 推荐(30) 编辑
摘要:特点: 将桶分段,并在某个段上加锁,提高并发能力 源码分析: V put(K key, int hash, V value, boolean onlyIfAbsent) { lock(); try { int c = count; if (c++ > threshold) // ensu... 阅读全文
posted @ 2015-06-05 11:34 风过无痕的博客 阅读(355) 评论(0) 推荐(0) 编辑
摘要:CopyOnWriteArrayList原理 首先每次写操作,都将数组copy一份,并赋值给arrays 读操作读不加锁 写操作加锁 ReentrantLock 因为每次写都要copy数组,这是一项繁重的操作,因此 CopyOnWriteArrayList适合读多写少的情况。 add方法的源码如下: public boolean add(E e) { final ReentrantLock... 阅读全文
posted @ 2015-06-05 11:08 风过无痕的博客 阅读(282) 评论(0) 推荐(0) 编辑
摘要:CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术。简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值 Unsafe用法: 作用,如果当前值和期望值相等,则将当前值更新为新的值X,并返回true 否则什么都不做,返回false return unsafe.compareAndSwapIn... 阅读全文
posted @ 2015-06-02 09:55 风过无痕的博客 阅读(346) 评论(0) 推荐(0) 编辑
摘要:代码示例: Lock lock = new ReentrantLock(); lock.lock(); try { // update object state } finally { lock.unlock(); } 相比synchronized的优势 1.具有更好的并发性能,激烈争用情况下更佳的性能 2.添加了类似锁投票、定时锁等候和可中断锁等候的一些特性 源码分析: 点击lock方... 阅读全文
posted @ 2015-06-01 17:54 风过无痕的博客 阅读(245) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示