同步访问共享数据【Effective java第10章】
来源:互联网 发布:淘宝发布产品找不到 编辑:程序博客网 时间:2024/05/16 18:21
在多线程编程时会涉及到共享数据的问题,以下是个人学习的一个小例子。
我们希望程序在一秒后结束,然而第一种却永远不会停止运行。
import java.math.BigDecimal;import java.util.concurrent.TimeUnit;public class StopThread {//private static boolean stopRequested ;//public static void main(String[] args) throws InterruptedException {//Thread backgroundThread=new Thread(new Runnable() {////@Override//public void run() {//int i=0;//while(!stopRequested){//i++;//}//}//});////backgroundThread.start();//TimeUnit.SECONDS.sleep(1);//永远不会终止,没有同步,不能保证后台线程何时"看到"主线程对stopRequested值的修改//stopRequested=true;//}/****************synchronized**********************///private static synchronized void requestStop(){//stopRequested=true;//}////private static synchronized boolean stopRequested(){//return stopRequested;//}//public static void main(String[] args) throws InterruptedException {//Thread backgroundThread=new Thread(new Runnable() {////@Override//public void run() {//int i=0;//while(!stopRequested()){//i++;//}//}//});////backgroundThread.start();//TimeUnit.SECONDS.sleep(1);//ok//requestStop();//}/********************volatile*******************/private static volatile boolean stopRequested ;//可以保证任何一个线程在读取改域的时候都将看到最近刚被写入的值public static void main(String[] args) throws InterruptedException {Thread backgroundThread=new Thread(new Runnable() {@Overridepublic void run() {int i=0;while(!stopRequested){i++;}}});backgroundThread.start();TimeUnit.SECONDS.sleep(1);//okstopRequested=true;}}
总结:volatile关键字虽然比synchronized要好用,但是volatile要谨慎使用,因为可能会导致安全性失败。
最佳办法是不共享可变数据,要么共享不可变的数据,要么压根不共享。
0 0
- 同步访问共享数据【Effective java第10章】
- effective java同步访问共享的可变数据
- Effective Java 读书笔记——66:同步访问共享的可变数据
- java,线程操作,同步访问共享的可变数据
- 【JAVA 并发】一 同步访问共享的可变数据
- 对共享可变数据的同步访问
- 并发-同步访问共享的可变数据
- 多线程访问共享数据同步原因
- 《Effective Java》第10章 并发
- effective java 读书笔记---第10章 并发
- Java多线程共享数据、同步、通信
- 共享数据的访问,其实就是协调同步
- 代码笔记 | 多线程使用queue模块同步访问共享数据
- Item48对共享可变的数据同步访问
- java多线程-使用ReadWriteLock同步数据访问
- Effective Java读书笔记(第10章-并发)
- 多线程同步访问共享内存
- 《Effective Java》第5章 泛型
- cocos2d-x 3.x 加载网络图片并
- 数字排序转变为字母排序
- 【matlab】 GMSK的调制与解调【附详尽注释】
- bzoj 3232 01分数规划
- Mac 环境下Android studio无法打开解决
- 同步访问共享数据【Effective java第10章】
- 访问修饰符
- SQL优化总结
- jsoup 提取 html中的所有链接
- ccf 高速公路
- myeclipse security alert integrity check error 解决
- Java基础学习之Random类和Robot类及猜数小游戏
- NULL指针
- HDU