2019-12-13 多线程中锁,wait,以及notify

在多线程中存在着多个线程交替运行的过程中,如果出现需要某个线程暂停或者暂停后重新启动,那么就要运用到wait()以及notify(),但在此之前我们先要了解一个锁的概念,只有被锁标记的对象或者方法才能运用到锁。
锁的创建:
对一个对象加锁:

objc o = new objc
synchronized (o){

}

对一个方法加锁在之public 之前添加一个synchronized就行:

synchronized public void a(){

}

wait()

介绍完锁之后我们就来说说锁的用法,wait()用于停止当前进程,但是wait()方法以及notify()方法都必须写在synchronized 块内:

objc o = new objc
synchronized (o){
   o.wait()
}

如果o一个线程o.wait()不是停止o这个线程而是停止o.wait所在的线程。

notify()

有暂停就有开始,notify就是用于开始同以对象中所锁住的一个进程,notifyAll是解开所有,也就是说只要synchronized 后的对象是一样在其他的类也可以打开其他类的当前对象的锁。

objc o = new objc;
Thread a = new Thread();
     public void run(){
synchronized (o){
   o.wait();
}
}
Thread b = new Thread();
     public void run(){
synchronized (o){
   o.notify();
}
}

通过b线程中的run也是能对a中的wait解锁的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 林炳文Evankaka原创作品。转载自http://blog.csdn.net/evankaka 本文主要讲了ja...
    ccq_inori阅读 724评论 0 4
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 3,086评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,574评论 1 15
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 2,292评论 0 14
  • 1.解决信号量丢失和假唤醒 public class MyWaitNotify3{ MonitorObject m...
    Q罗阅读 980评论 0 1

友情链接更多精彩内容