- class Thread1 extends Thread
- {
- private MasterCard mc;//将mc类对象传入作为成员变量
- public Thread1(MasterCard mc)
- {
- this.mc = mc;
- }
- public void run()
- {
- mc.charge1000();//调用synchronized方法,相当于锁住的是引用该方法的类对象mc本身
- // mc.charge();//单线程时run方法内部相当于调用对象mc的方法
- }
- }
- class Thread2 extends Thread
- {
- private MasterCard mc;
- public Thread2(MasterCard mc)
- {
- this.mc = mc;
- }
- public void run()
- {
- mc.printMoney();
- mc.charge2000();
- }
- }
- public class MasterCard
- {
- int money = 10000;
- public synchronized void charge2000()//修饰方法,相当于锁住的是引用该方法的类对象本身
- {
- // synchronized(this)
- // {
- this.money -= 2000;
- System.out.println("取2000后余额:" + this.money);
- // }
- }
- public void printMoney()
- {
- System.out.println("取2000前余额:" + this.money);
- }
- public synchronized void charge1000()
- {
- // synchronized(this)
- // {
- this.money -= 1000;
- System.out.println("取1000后余额:" + this.money);
- // }
- }
- public static void main(String[] args)
- {
- MasterCard mc = new MasterCard();
- Thread1 t1 = new Thread1(mc);
- t1.start();
- Thread2 t2 = new Thread2(mc);
- t2.start();
- }
- public void charge()
- {
- synchronized (this)
- {
- System.out.println("取款1000前:" + money);
- money -= 1000;
- System.out.println("余额:" + money);
- }
- }
- // public void charge()
- // {
- // System.out.println("取款前:" + money);
- // money -= 1000;
- // System.out.println("余额:" + money);
- // }
- //
- }
本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1194998,如需转载请自行联系原作者