复习JAVA,对线程共享同步的感觉还是很抽象 比如我写了如下的代码: class MyThreadSync implements Runnable{ private int ticket=5; public void run(){ for(int i=0;i<100;i++){ if(ticket>0){ System.out.println("ticket="+ticket); ticket--; } } } } public class SyncDemo { public static void main(String args[]){ MyThreadSync mt=new MyThreadSync(); Thread t1=new Thread(mt); Thread t2=new Thread(mt); Thread t3=new Thread(mt); t1.start(); t2.start(); t3.start(); } } 此时运行的结果为: ticket=5 ticket=4 ticket=3 ticket=2 ticket=1 ticket=5 但是如果加入了sleep方法, class MyThreadSync implements Runnable{ private int ticket=5; public void run(){ for(int i=0;i<100;i++){ if(ticket>0){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("ticket="+ticket); ticket--; } } } } public class SyncDemo { public static void main(String args[]){ MyThreadSync mt=new MyThreadSync(); Thread t1=new Thread(mt); Thread t2=new Thread(mt); Thread t3=new Thread(mt); t1.start(); t2.start(); t3.start(); } } 结果又变成: ticket=5 ticket=4 ticket=4 ticket=2 ticket=1 ticket=1 ticket=-1 为什么会出现这种结果? 第1个问题:使用Runnable不是可以共享操作吗?为什么ticket=4又会出现2次? 第2个问题:sleep方法的作用是什么? ticket=5 ticket=4 ticket=3 ticket=2 ticket=1 ticket=-1 |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |