JUC
码农小李
这个作者很懒,什么都没留下…
展开
-
模拟CAS算法
模拟CAS算法 public class TestCAS { public static void main(String[] args) { final CAS cas=new CAS(); for (int i = 0; i < 10; i++) { new Thread(new Runnable() { @Override public void run() {原创 2020-07-24 16:21:02 · 126 阅读 · 0 评论 -
原子性问题和CAS算法
原子性问题和CAS算法原子性问题原子变量CAS算法举例代码 原子性问题 场景如下:例如i++,实际上分成三个步骤“读-改-写”。 int temp=i; i=i+1; return temp; 由于该操作分成多个步骤,整体不具有原子性。最终导致当有多个线程同时访问共享数据时,就会出现重复数据的问题。 为了解决重复数据的问题,在jdk1.5之后提出了java.util.concurrent.atomic 包下提供了常见的原子变量。 原子变量 1、volatile 保证内存可见性 2、CAS算法 保证数据的原原创 2020-07-23 16:34:38 · 352 阅读 · 0 评论 -
volatile关键字和内存可见性
volatile关键字和内存可见性内存可见性问题问题举例如下问题描述分析原因解决办法注意事项 内存可见性问题 当多个线程访问共享资源时,彼此的线程不可见。 问题举例如下 问题描述 启动程序后,会生成两个线程主线程和子线程。根据代码所示,程序运行应该会结束。但是由于内存可见性问题导致程序无法终止。 public class VolatileDemo { public static void main(String[] args) { ThreadDemo threadDemo=new原创 2020-07-22 15:42:42 · 83 阅读 · 1 评论