多线程笔记1-线程的共享与协作

2020-05-17  本文已影响0人  tangYaXin

什么是多线程的共享? 什么是多线程之间的协作?

多线程的共享:是指多个线程访问同一个对象。

多线程的协作是指:当A线程需要执行的操作依赖于B线程,这时候A线程需要B线程执行完成之后通知A线程来执行。所谓多个线程之间的协作,来完成任务。使用的方法(在内置锁中)为wait()和notify(),notifyAll();这3个方法都是Object中的方法。 显示锁Lock,需要Load接口方法的newCondition()来获取Condition的实例,调用condition.await()  condition.signal()与signalAll(). 需要注意的是,内置锁的方式尽量使用notifyAll()来唤醒线程。

因为notify()方法只能唤醒某一个线程,且不能指定哪一个线程。 显示锁的方式尽量使用signal(),因为通过newCondition()方式可以获取多个不同的Condition实例,从而实现业务逻辑。

等待与唤醒的标准范式

等待方

synchronized(对象){

while(条件不满足){

wait();

}

执行业务逻辑

}

通知方

synchronized(对象){

执行相关的逻辑。将条件设置为满足

notifyAll()

}

以上为等待唤醒机制的标准范式,可以看到,等待方和通知方执行操作时都是会拿锁的,为什么要还这么写呢?因为wait是会释放当前的锁的,notifyAll()不会释放锁,只有在synchronized关键字所包含的代码块执行完成之后才会释放锁。

上一篇 下一篇

猜你喜欢

热点阅读