| class Ticket implements Runnable {
 private  int tick = 100;
 Object obj = new Object();
 boolean flag = true;
 public  void run()
 {
 if(flag)//条件为真,
 {
 while(true)//t1线程始终在这个循环里待着,死循环
 {
 synchronized(this)//这里用的是this锁
 {
 if(tick>0)
 {
 try{Thread.sleep(10);}catch(Exception e){}
 System.out.println(Thread.currentThread().getName()+"....code : "+ tick--);
 }
 }
 }
 }
 else
 while(true)//t2线程始终在执行这一句,while true。
 show();
 }
 public synchronized void show()//这是同步代码快,也是用的this锁     和上面是一个锁,所以就同步了。
 {
 if(tick>0)
 {
 try{Thread.sleep(10);}catch(Exception e){}
 System.out.println(Thread.currentThread().getName()+"....show.... : "+ tick--);
 }
 }
 }
 class  ThisLockDemo
 {
 public static void main(String[] args)    //请分析下主函数中的执行顺序,以及各线程的执行原理和切换方式,毕老师说的主线程
 //和其他线程线程有没有执行上的优先顺序
 {
 Ticket t = new Ticket();
 Thread t1 = new Thread(t);
 Thread t2 = new Thread(t);//1,创建t1,t2两个线程,将t作为参数传入其中
 t1.start();//开启t1线程
 try{Thread.sleep(10);}catch(Exception e){}//主线程读到这里。睡了10毫秒。。。
 t.flag = false;//改变t的标记,让上面的if判断条件为假,判断是为假了,可是判断是只执行一次的
 //里面是while(true)循环。。。所以t1会一直在while里循环着。
 t2.start();//开启t2线程,由于if判断为false,所以t2直接走else,t1,t2,资源是共享的。
 
 }
 }
 
 |