栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

并发线程安全

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

并发线程安全

出现线程安全问题的原因:

1、原子性:不同线程对共享变量非原子读写

2、可见性:不同线程使用共享变量时会从主存中复制一份共享变量的副本到自己的本地内存中,副本被修改后不会及时刷新到主存中,其他线程获取到的是未修改时的值

3、有序性:CPU为了执行效率,会把CPU指令进行重新排序,单线程重排序后的执行结果与代码顺序预期的结果一致,多线程重排序则可能会导致运行结果与预期结果不一致

解决方法:

1、原子性:①使用synchronized加锁

                    ②循环CAS操作(Lock和原子类(AtomicInteger))

     例:static Lock lock = new Lock ();

             lock.lock();        //加锁

             count++;

             lock.unlock();    //解锁

             static AtomicInteger count = new AtomicInteger(0);

             count.incrementAndGet(); //自增

             count.decrementAndGet(); //自减

2、可见性:①加锁,synchronized和Lock都可以保证

                    ②使用volatile修饰共享变量(修改后会立即刷新到主存,读取变量值时会从主存重新获取)

3、有序性: ①使用volatile修饰变量,被修饰变量读写操作时会保证前面的代码指令已经执行且后面的代码未执行

                     ②加锁,synchronized

参考:【JAVA并发第四篇】线程安全 - 就行222 - 博客园

                    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号