多个线程各自占有一些公共资源,并且互相等待其他线程的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。
这种情况在某个同步块同时拥有“两个或者两个以上对象的锁时同时发发生“时。
可以通过管程法或者信号灯法进行解决。
管程法是利用生产者消费者模式进行解决的,即如果两个线程分别作为生产者,消费者,他们共享一个资源,并且互相依赖,互为条件。对于生产者,在没有生产产品之前要通知消费者等待,在生产力产品之后又要立马通知消费者消费。
对于消费者,在消费之后要通知生产者已经消费完毕,需要继续生产产品。
信号灯法:两个方法,wait():让当前线程处于阻塞状态,直到其他线程调用次对象的notify()。
notofy():唤醒一个处于等待中的线程。
死锁及其解决方法
最新推荐文章于 2024-04-03 23:20:58 发布