首页 > 其他 > 详细

7.volatile关键字

时间:2017-08-07 23:43:38      阅读:242      评论:0      收藏:0      [点我收藏+]

volatile:一个线程修改了某一个共享变量的值,其他线程也是否能够立即知道这个修改的

1.主要是让该“变量”在多个线程中可见,在java中每一个线程都有一块自己的工作区,其中就存放着所有线程“共享变量”的变量值的拷贝、复制。
2.当线程执行时,他在自己的工作内存区操作的这些变量,为了存取这些变量,一个线程通常会先去获取锁,并去除它的内存工作区,把这个共享变量从所有线程的
  的工作区拿到他自己的工作内存区,当自己操作完成后,解锁并把该变量的值重新“刷新写入”到共享内存中。
3.线程的操作:使用、赋值、装载、存储、锁定、解锁
4.主内存可以执行:read、wrlte、lock、unlock 原子性操作
5.强制线程去主内存中(共享变量)去读取变量,而不是去此案的工作内存区取出、从而实现了多个线程的变量可见性,满足线程安全。
技术分享
  1. package demo1;
  2. /**
  3. * Created by liudan on 2017/7/2.
  4. */
  5. public class MyThread_volatile extends Thread {
  6. private volatile boolean isRunning = true;
  7. public void setRunning(boolean running) {
  8. isRunning = running;
  9. }
  10. @Override
  11. public void run() {
  12. System.err.println("进入 run 方法");
  13. while (isRunning==true){
  14. /* System.err.println("run 方法操作中.................");*/
  15. }
  16. System.err.println("停止run 方法");
  17. }
  18. public static void main(String[] args) throws InterruptedException {
  19. MyThread_volatile thread_volatile = new MyThread_volatile();
  20. thread_volatile.start();
  21. Thread.sleep(3000);
  22. thread_volatile.setRunning(false);
  23. System.err.println("setRunning 方法");
  24. Thread.sleep(1000);
  25. System.err.println("结束:"+thread_volatile.isRunning);
  26. }
  27. }
  28. 输出:
  29. 进入 run 方法 setRunning 方法 停止run 方法 结束:false





7.volatile关键字

原文:http://www.cnblogs.com/xxt19970908/p/7302422.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!