线程:synchronized方法

  1. class Thread1 extends Thread 
  2.     private MasterCard mc;//将mc类对象传入作为成员变量 
  3.      
  4.     public Thread1(MasterCard mc) 
  5.     { 
  6.         this.mc = mc; 
  7.     } 
  8.      
  9.     public void run() 
  10.     { 
  11.         mc.charge1000();//调用synchronized方法,相当于锁住的是引用该方法的类对象mc本身 
  12.       //  mc.charge();//单线程时run方法内部相当于调用对象mc的方法 
  13.     } 
  14.  
  15. class Thread2 extends Thread 
  16.     private MasterCard mc; 
  17.      
  18.     public Thread2(MasterCard mc) 
  19.     { 
  20.         this.mc = mc; 
  21.     } 
  22.      
  23.     public void run() 
  24.     { 
  25.         mc.printMoney(); 
  26.         mc.charge2000(); 
  27.     } 
  28. public class MasterCard 
  29.     int money = 10000
  30.     public synchronized void charge2000()//修饰方法,相当于锁住的是引用该方法的类对象本身 
  31.     { 
  32. //        synchronized(this) 
  33. //        { 
  34.             this.money -= 2000
  35.             System.out.println("取2000后余额:" + this.money); 
  36. //        } 
  37.     } 
  38.      
  39.     public void printMoney() 
  40.     { 
  41.         System.out.println("取2000前余额:" + this.money); 
  42.     } 
  43.      
  44.     public synchronized void charge1000() 
  45.     { 
  46. //        synchronized(this) 
  47. //        { 
  48.             this.money -= 1000
  49.             System.out.println("取1000后余额:" + this.money); 
  50. //        } 
  51.     } 
  52.      
  53.     public static void main(String[] args) 
  54.     { 
  55.         MasterCard mc = new MasterCard(); 
  56.         Thread1 t1 = new Thread1(mc); 
  57.         t1.start(); 
  58.         Thread2 t2 = new Thread2(mc); 
  59.         t2.start(); 
  60.          
  61.     } 
  62.      
  63.     public void charge() 
  64.     { 
  65.         synchronized (this
  66.         { 
  67.             System.out.println("取款1000前:" + money); 
  68.             money -= 1000
  69.             System.out.println("余额:" + money); 
  70.         } 
  71.     } 
  72.      
  73.      
  74.      
  75.     // public void charge() 
  76.     // { 
  77.     // System.out.println("取款前:" + money); 
  78.     // money -= 1000; 
  79.     // System.out.println("余额:" + money); 
  80.     // } 
  81.     // 
  82.      




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1194998,如需转载请自行联系原作者
上一篇:利用LUA协程实现FUTURE模式


下一篇:SQL语句Limit的作用——分页