Java死锁程序(二)

第一种:

其中t1,t2调用join的目的是为等待t1,t2执行完才进行打印,否则i≠20000000,因为t1,t2没有执行完就打印i了


第二种:同步直接用在实例方法上,i++会把锁放在当前对象实例上



第三种:把锁加错了地方


此时输出小于20000000,肯定有地方发生数据冲突,

原因:此时的锁是在AccouingSyncBad对象的实例上,但是16\17行 new出了两个不同的对象实例,也就是当

你执行12行的时候,一个线程对t1加锁,一个线程对t2加锁,很显然t1,t2不是同一个对象,因为都是new出来的,最终的结果就是它们不在同一个锁上,所有数据有了问题,若变成


则t1,t2在同一个对象上没有问题


第四种:在类上加锁


此时t1,t2的Runnable实例是不一样的,但是我们把锁加在了类(static修饰的方法是类方法)上,而不是对象实例上,所以还是可以正常工作的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值