Java 并发编程
joexk
点滴记录
展开
-
sleep,wait,yield,join方法的使用与区别
1. sleep() 方法在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁”。 sleep()使当前线程进入阻塞状态,在指定时间内不会执行。Thread.sleep(1000);2. wait() 方法wait() 方法是 Object 类的一个 final 方法,其定义如下:public final void wait() throws Interrupte...转载 2018-04-06 16:58:50 · 285 阅读 · 0 评论 -
ABA问题及其解决方法
一、ABA问题的产生CAS 在修改变量值时,会先检查该变量的值是否和预期值一致,若一致则修改,引发的ABA问题的情况是:如一个变量初始值为A,被另外一个线程修改成B,再由B修改为A,此时使用CAS进行操作就检查不出变量的变化轨迹,并对该变量修改,这就是ABA问题,其前提条件是“节点可以被循环使用”。下面通过例子来模拟ABA问题:public class Node { public f...原创 2019-01-31 23:47:40 · 7260 阅读 · 0 评论 -
CAS实现原子操作的三个问题
在java中,如果要进行原子操作,我们可以通过加锁或CAS的方式来实现。其中,CAS虽然高效的解决了原子操作,但需要注意其存在的三个问题:ABA问题、自旋时间长开销大、只能保证一个共享变量的原子操作。一、ABA问题快速排序算法是对冒泡排序的一种改进。快排基本思想是:通过一趟排序将要排序的数据以基准数据分割成独立的两部分,其中一部分的所有数据都比基准数据小,另外一部分的所有数据都比基准数据大,...原创 2019-01-30 23:38:08 · 671 阅读 · 0 评论