synchronized使用和wait与notify的使用之我的理解

synchronized我的理解:
synchronized(obj)这个指定了对象的同步快中,obj会在线程进去时加锁,所以不会去理会这个同步块被哪个对象或哪个线程调用,只要有线程进去,则obj就加锁,然后其他所有线程都无法进去了,包括无法进入其他地方的synchronized(obj){}块(参数里的两个obj为同一个对象)

 

 


在执行wait和notify会释放锁,所以必须在同步块中执行

synchronized(obj){
 obj.wait()和
 wait()不同,前者释放锁,后者虽然也是释放锁,但却不是释放的obj对象的锁,而是this对象的锁,this对象!=obj对象,不在同步块中,哪来的锁呢,所以会报错
}

 

 

 


在synchronized(obj)块中,
当obj.wait()调用时,obj控制该线程的wait和notify,而其他对象不能控制,当obj.wait()时,obj所在的线程wait,并会释放锁,让其他线程进入synchronized区,若碰到obj.wait(),该线程又会等待并释放锁依此类推

 


当有线程调用obj.notify时也必须在同步块中,因为之前obj wait住了几个线程,所以需要obj去notify这几个线程

 

但是当一个线程被notify以后,这个obj又将获得锁,这个锁从哪里来呢?首先obj自己不能产生锁,必须由synchronized(obj)执行时提供给obj对象

 


这就是obj.notify要在同步块中的原因,而且还必须是synchronized(obj)不能是其他的如synchronized(obj2)之类的对象,obj.notify再执行的时候就obj对象再次加锁,被obj.wait处的线程再次启动,其他线程再次不能进入synchronized区

 

 

 

 

ps:之前学习的时候常常听见类似“线程所持有的对象”这些话。听起来太“专业”了听不懂,实际上就是synchronized(obj)中obj要相同。

同步方法:

 

synchronized method()
和method(){

    synchronized(this){

 

    }

}

是一样的效果

 

 

 

欢迎拍砖!!!!!!!!

 

有不同意见提出且正确者,买彩票中大奖!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值