赞
踩
java.util.concurrent
(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,- // 使用 volatile 之前
- public class TestVolatile{
-
- public static void main(String[] args){
- ThreadDemo td = new ThreadDemo();
- new Thread(td).start();
-
- while(true){
- if(td.isFlag()){
- System.out.println("########");
- break;
- }
- }
- }
- }
-
- class ThreadDemo implements Runnable{
- private boolean flag = false;
-
- public void run(){
- try{
- // 该线程 sleep(200), 导致了程序无法执行成功
- Thread.sleep(200);
- }catch(InterruptedException e){
- e.printStackTrace();
- }
-
- flag = true;
-
- Sytem.out.println("flag="+isFlag());
- }
-
- public boolean isFlag(){
- return flag;
- }
-
- public void setFlag(boolean flag){
- this.flag = flag;
- }
- }

- // 解决问题方式一: 同步锁
- // 但是,效率太低
- public class TestVolatile{
-
- public static void main(String[] args){
- ThreadDemo td = new ThreadDemo();
- new Thread(td).start();
-
-
- while(true){
- // 使用同步锁
- synchronized(td){
- if(td.isFlag()){
- System.out.println("########");
- break;
- }
- }
- }
- }
- }
-
- // 解决方式二: 使用 volatile 关键字
- public class TestVolatile{
-
- public static void main(String[] args){
- ThreadDemo td = new ThreadDemo();
- new Thread(td).start();
-
- while(true){
- if(td.isFlag()){
- System.out.println("########");
- break;
- }
- }
- }
- }
-
- class ThreadDemo implements Runnable{
- private volatile boolean flag = false;
-
- 同上(略)
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。