【Effective Java】11、同步访问共享的可变数据
2016-10-09 22:01
288 查看
这段时间看的部分感觉没啥需要记录下来的,个人也没什么想法,不过以后还是要多记,多写
这个main方法是永远不停的,其余两个从两个不同的角度给出了同步的方法
总之:当多个线程共享可变数据的时候,每个读或者写数据的线程都必须执行同步。
package cn.xf.cp.ch02.item66; import java.util.concurrent.TimeUnit; import org.junit.Test; public class StopThread { /** * 停止线程变量 */ private static boolean stopRequested; //吧对变量的读和写方法都进行同步 private static synchronized void requestStop() { stopRequested = true; } private static synchronized boolean stopRequested() { return stopRequested; } /** * 停止线程变量,这个使用关键字volatile使每个线程都是获取到最新的值 */ private static volatile boolean stopRequested2; @Test public void test() { Thread backgroundThread = new Thread(new Runnable() { @Override public void run() { int i = 0; while(!stopRequested()) { ++i; } } }); //启动线程 backgroundThread.start(); //休眠1秒 try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } requestStop(); } @Test public void test2() { Thread backgroundThread = new Thread(new Runnable() { @Override public void run() { int i = 0; System.out.println("这里使用最新的stopRequested2值"); while(!stopRequested2) { ++i; } } }); //启动线程 backgroundThread.start(); //停下1s之后执行变量修改程序 try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //修改变量 stopRequested2 = true; } public static void main(String[] args) throws InterruptedException { Thread backgroundThread = new Thread(new Runnable() { @Override public void run() { int i = 0; System.out.println(stopRequested); //false //这里停不下来是因为主线程对stopRequest进行修改的时候,这个线程并不可见 while(!stopRequested) { ++i; } } }); //启动线程 backgroundThread.start(); //休眠1秒 TimeUnit.SECONDS.sleep(1); stopRequested = true; } }
这个main方法是永远不停的,其余两个从两个不同的角度给出了同步的方法
总之:当多个线程共享可变数据的时候,每个读或者写数据的线程都必须执行同步。
相关文章推荐
- effective java同步访问共享的可变数据
- Effective Java 读书笔记——66:同步访问共享的可变数据
- 对共享可变数据的同步访问
- java,线程操作,同步访问共享的可变数据
- 并发-同步访问共享的可变数据
- 多线程访问共享数据同步原因
- 代码笔记 | 多线程使用queue模块同步访问共享数据
- 同步访问共享数据【Effective java第10章】
- 共享数据的访问,其实就是协调同步
- IBM Java多线程 - 4.共享对数据的访问
- synchronized解决多线程共享数据同步问题
- 宽带能连接上,接收不到数据或局域网内某台电脑的共享资源无法访问解决办法
- Java线程同步锁解决共享数据安全
- Java线程同步锁解决共享数据安全
- 使用C# lock同时访问共享数据
- 访问有用户名和密码的网络共享,实现数据导入
- 使用ACE互斥,同步线程共享的数据资源
- 使用C# lock同时访问共享数据
- Android 应用程序之间数据共享—ContentProvider 保时被访问