静态方法的同步代码

来源:互联网 发布:淘宝网购物女装夏装 编辑:程序博客网 时间:2024/05/17 22:01
  1.   
  2. class Ticket implements Runnable  
  3. {  
  4.     private int tick = 1000;  
  5.       
  6.     //Object obj = new Object();  
  7.   
  8.     boolean flag = true;  
  9.   
  10.     public void run()  
  11.     {  
  12.         if(flag)//第一个进入的线程实行下面代码  
  13.         {  
  14.                 while(true)  
  15.                 {  
  16.                     //synchronized(obj)//由于同步函数的是以this对象为锁的 此处如果使用obj对象作为锁  
  17.                                         //则不能实现同步 输出的数据会出现错误 程序的安全性不能得到保证  
  18.                     synchronized(Ticket.class)//和下面的show函数使用同样的锁 可以保证同步  
  19.                     {  
  20.                         if(tick>0)  
  21.                         {  
  22.                             try{Thread.sleep(40);}catch(Exception e){}  
  23.                             System.out.println(Thread.currentThread().getName() +" .....code..."+ tick--);  
  24.   
  25.                         }  
  26.                     }  
  27.                 }  
  28.         }//第二个进入的代码实行下面代码  
  29.         else  
  30.             while(true)  
  31.                 show();//this.show();  
  32.       
  33.     }  
  34.     publicstatic synchronized void show()//同步函数 以this为锁  
  35.     {  
  36.         if(tick>0)  
  37.         {  
  38.             try{Thread.sleep(40);}catch(Exception e){}  
  39.             System.out.println(Thread.currentThread().getName() +" .....show..."+ tick--);  
  40.         }         
  41.     }  
  42.   
  43. }  
  44.   
  45.   
  46. class ThisLockDemo  
  47. {  
  48.     public static void main(String []args)  
  49.     {  
  50.         Ticket t = new Ticket();  
  51.         Thread t1 = new Thread(t);  
  52.         Thread t2 = new Thread(t);  
  53.       
  54.         t1.start();//开启第一个线程  但不一定马上执行  
  55.           
  56.         t.flag = false;//改变标志  
  57.         try{Thread.sleep(40);}catch(Exception e){}//让主线程睡眠40毫秒  保证第一个线程先开始运行 且标志位改变  
  58.   
  59.         t2.start();   
  60.     }  
  61. }  
0 0
原创粉丝点击