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解锁的。

你可能感兴趣的