
java多线程
文章平均质量分 95
wuyuanshun
这个作者很懒,什么都没留下…
展开
-
java多线程详细讲解 线程的创建、线程的状态、synchronized锁、Volatile关键字、和cas锁(自旋锁 乐观锁 无锁)
cas(compareAndSet 比较并且设置)逻辑,从代码中我们可以看出使用了do{循环执行的语句} while(是否继续循环)语句,首先执行获取当前值v 如v=1,然后进入循环判断 是否比较并设置成功了(compareAndSetInt();) 所以核心方式是compareAndSetInt ,但是这个方法是native修饰的,也就是C++语言实现的这个方法:Unsafe类的C++源码追踪原创 2023-04-12 19:21:55 · 960 阅读 · 0 评论 -
java单例模式的线程安全 JAVA多线程编程中的双重检查锁定(DCL单例(Double Check Lock))
以上代码使用了双重检查锁,但是还是存在线程安全问题,因为可能会出现代码指令重排序。重排序其实出现在字节码层级。在字节码层级Object o=new Object();如果赋值和关联语句发生了代码重排序 ,及两句交换执行。就会出现先把对象关联到o,但是对象还没有初始化赋值。前加 volatile关键字【禁止指令重排序(CPU)】INVOKESPECIAL java/lang/Object. ()V 赋值。NEW java/lang/Object 申请内存。2.禁止指令重排序(CPU)原创 2023-04-12 13:54:27 · 686 阅读 · 0 评论