JAVA线程中,哪里有synchronized,那里就要有notifyAll()

JAVA线程中,哪里有synchronized,那里就要有notifyAll(),写多线程一定要记得这个原则,否则是哪里出了问题,你根本就找不出来,我可是吃了够大的苦,因为我模拟的线程很多,都是1000一批,大部份时候都是不能够全部执行成功,一步步的找呀,真的很痛苦。同步一般用的比较多的用块同步、方法同步,也有些需要对类同步,对类同步则类中的所有方法都是同步的,如典型的Hashtable,就是线程安全的,也即同步的。以下摘一些写法:

块同步:

synchronized(this){ //dosomething //下面这一步千万别忘了,要告诉别的线程你OK了,该别人了 notifyAll(); } //另注:千万不要将notifyAll()写在同步块的外面,否则自己连怎么死的 //都不知道,不要看我,我就是这么被折磨过来的,谁叫自己不争气呢,要 //写成下面这样 //notifyAll();

方法同步:

private synchronized void addDealOk(){ //dosomething notifyAll(); } //同理,不要把notifyAll()写到调用该同步方法的方法里面,一定要写在 //被调用的同步方法里面

另外,一个同步方法调用另外一个同步方法的时候,最好两个方法中都把notifyAll()给加上,这样只有好处,不会有坏处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值