摘要: 提到了CAS操作存在问题,就是在CAS之前A变成B又变回A,CAS还是能够设置成功的,什么场景下会出现这个问题呢?查了一些资料,发现在下面的两种情况下会出现ABA问题。 1.A最开始的内存地址是X,然后失效了,有分配了B,恰好内存地址是X,这时候通过CAS操作,却设置成功了 这种情况在带有GC的语言 阅读全文
posted @ 2017-11-21 21:23 木易森林 阅读(5646) 评论(0) 推荐(0) 编辑
摘要: 在多线程的并发编程中synchronized和volatile都扮演着重要的角色。volatile是轻量级的synchronized,它在多处理器的开发中保证了共享变量的可见性,可见性的意思是当一个线程修改一个共享变量时,另一个线程能够读取到这个修改值。如果volatile变量使用恰当的话,他会比s 阅读全文
posted @ 2017-11-21 20:59 木易森林 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 当程序更新一个变量时,如果是多线程同时更新这个变量,可能得到的结果与期望值不同。比如:有一个变量i,A线程执行i+1,B线程也执行i+1,经过两个线程的操作后,变量i的值可能不是期望的3,而是2。这是因为,可能在A线程和B线程执行的时候拿到的i的值都是1,这就是线程不安全的更新操作,通常我们会使用s 阅读全文
posted @ 2017-11-21 19:29 木易森林 阅读(15359) 评论(1) 推荐(1) 编辑