技术分享:Java多线程编程(进阶版--含代码示例)
1.1 volatile 关键字(轻量级同步)1.1.1 核心作用volatile是Java轻量级并发关键字,具备两大核心特性,不保证原子性:保证可见性:一个线程修改共享变量,其他线程立即感知到最新值,避免变量缓存导致数据不一致;禁止指令重排:杜绝CPU、编译器优化代码执行顺序,解决多线程乱序执行问题;局限性:仅能修饰变量,无法保证复合操作(如i++)的原子性,不能替代锁。1.1.2 可见性代码演示publicclassVolatileVisibleDemo{// 不加volatile,子线程会一直死循环,感知不到变量修改privatestaticvolatilebooleanflag=true;publicstaticvoidmain(String[]args)throwsInterruptedException{// 子线程循环监听flagnewThread(()-{while(flag){// 空循环}System.out.println("子线程感知到flag变更,退出循环");}).start();// 主线程延迟修改flagThread.sleep(1000);flag=false;System.out.println("主线程修改flag为false");}}现象说明:去掉volatile时,子线程会永久死循环(缓存了旧的flag值);添加volatile后,子线程立即感知变量变更,终止循环。1.2 CAS 无锁乐观锁(原子类底层原理)1.2.1 核心原理CAS(Compare And Swap,比较并交换)是无锁乐观并发机制,是原子类、AQS的底层核心,核心逻辑三步:获取当前内存中的变量值(预期值);比较预期值和内存真实值是否一致;一致则更新为新值,不一致则重试,全程无锁、效率极高。1.2.2 CAS 手写简易实现publicclassCasDemo{// 共享变量privatestaticintvalue=0;// 模拟CAS方法:预期值、新值publicsynchronizedbooleancas(intexpect,intnewValue){if(value==expect){value=newValue;returntrue;// 修改成功}returnfalse;// 冲突,修改失败}publicstaticvoidmain(String[]args)throwsInterruptedException{// 10个线程并发累加for(inti=0;i10;i++){newThread(()-{// CAS自旋重试,直到修改成功while