多线程笔记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关键字所包含的代码块执行完成之后才会释放锁。