Java多线程与同步的学习

      同步和多线程的关系:1.没有多线程环境就不需要同步。2.即使有多线程环境也不一定需要同步。

 

       一旦一个线程处于一个标记为synchronized的方法中,那么在这个线程从该方法中返回之前,其他所有要调用类中任何标记为synchronized方法的线程都会被阻塞。

      每个对象都有一个单一的锁,这个锁本身就是对象的一部分。当在对象上调用其任意synchronized方法的时候,此对象都被加锁,这是该对象上的其他synchronized方法只有等到前一个方法调用完毕并释放了锁之后才能被调用。

      原子操作不需要进行同步(对除double和long以外的其他基本类型的进行读取或赋值的操作也是原子操作。然而,只要给long或double加上volatile,操作就是原子操作了。) 


      只能在同步控制方法或同步块中调用wait()notify()notifyAll()。如果在非同步的方法里调用这些方法,在运行时会抛出java.lang.IllegalMonitorStateException异常。


     在调用wait的时候,线程自动释放其占有的对象锁,同时不会去申请对象锁。当线程被唤醒的时候,它才再次获得了去获得对象锁的权利。notify仅唤醒一个线程并允许它去获得锁,notifyAll是唤醒所有等待这个对象的线程并允许它们去获得对象锁。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值