本帖最后由 陈雪琪 于 2013-5-3 13:10 编辑
- class ThisLockDemo
- {
- public static void main(String[] args){
- Ticket t=new Ticket();
- Thread t1=new Thread(t);
- Thread t2=new Thread(t);
- t1.start();
- try{Thread.sleep(10);}catch(Exception e){}
- t.flag=false;
- t2.start();
- }
- }
- class Ticket implements Runnable
- {
- private int num=100;
- Object obj=new Object();
- boolean flag=true;
- public void run(){
- if(flag){
- while(true){
- synchronized(obj){
- if(num>0){
- try{Thread.sleep(10);}
- catch(InterruptedException e){}
- System.out.println(Thread.currentThread().getName()+"sale.."+num--);
- }
-
- }
- }
- }
- else
- while(true)
- show();
- }
-
- public synchronized void show(){
- if(num>0){
- try{Thread.sleep(10);}
- catch(InterruptedException e){}
- System.out.println(Thread.currentThread().getName()+"showshow........"+num--);
- }
- }
-
- }
复制代码 这段代码的运行结果是(只截取了一小部分)
问题:
为什么Thread-0线程一直打印的都是同步代码块中的sale。虽然老师说让主线程睡一会,先不让flag变为false。可是当主线程醒了后flag就会变成false了啊,这个时候Thread-0就应该执行的是同步函数show方法中的内容了,应该要打印showshow才是吧?为什么还是直到最后都是打印sale呢?
PS:刚学到这,现在该程序是不安全的,暂且不纠结程序的安全问题。
|
-
捕获.PNG
(14.3 KB, 下载次数: 0)
运行结果(截取的是前半部分)
|