//同步代码块和同步锁
public class ThreadDemo4{
public static void main(String args[]){
tickets t=new tickets();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.start();
try{Thread.sleep(100);}catch(Exception e){System.out.println("错误");} //主线程休眠后,t1会运行if语句中的代码块,可是为什么主线程唤醒后,执行了 t.flag=false;后,t1还可以执行if语句中的代码块,此时flag不是false吗?不是应该一直在else语句中执行吗???
t2.start();
}
}
class tickets implements Runnable{
private int tickets=100;
Object obj=new Object();
boolean flag=true;
public void run(){
if(flag){
while(true){
synchronized(obj){
if(tickets>0){
try{Thread.sleep(100);}catch(Exception e){System.out.println("错误");}
System.out.println(Thread.currentThread().getName()+"----run--"+tickets--);
}
}
}
}
else{
while(true){
show();
}
}
}
public synchronized void show(){
if(tickets>0){
try{Thread.sleep(100);}catch(Exception e){System.out.println("错误");}
System.out.println(Thread.currentThread().getName()+"---show---"+tickets--);
}
}
}
我不懂为什么ti线程开启之后不是把flag值重置为false了吗,为什么在ti.start()方法后让主线程休眠一会,那么程序再运行时就是t1和t2的交替运行了呢?此时flag不还是false吗,为什么 System.out.println(Thread.currentThread().getName()+"----run--"+tickets--);这句代码就可以执行,而不是一直执行System.out.println(Thread.currentThread().getName()+"---show---"+tickets--);
主线程难道不是一直存在吗?还是在第一次运行完t1.start();t2.start();之后就消亡了呢???
|