- 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);
- // }
- //
- }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。