快捷搜索:  汽车  科技

python的线程出现死锁(用例子理解并发编程中的)

python的线程出现死锁(用例子理解并发编程中的)开3个等待的线程,一个通知的线程,通知的线程里面调用notify方法我们用例子演示说明假设线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁,同时线程A就进入到了该对象的等待池中,进入到等待池中的线程不会去竞争改对象的锁notifyAll会让所有处于等待池的线程全部进入锁池去竞争获取锁的机会notify只会随机选取一个处于等待池中的线程进入锁池去竞争获取锁的机会

python的线程出现死锁(用例子理解并发编程中的)(1)

本文为小编原创文章,首发于Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注

介绍

锁池EntryList

等待池WaitSet

python的线程出现死锁(用例子理解并发编程中的)(2)

锁池

假设线程A已经拥有了某个对象(不是类)的锁,而其他线程B,C想要调用这个对象的某个synchronized方法(或者块),由于B,C线程在进入对象的synchronized方法(或者块)之前就必须先获得该对象锁的拥有权,而恰巧该对象的锁目前正被线程A所占用,此时B,C线程就会被阻塞,进入一个地方去等待锁的释放,这个地方便是该对象的锁池

等待池

假设线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁,同时线程A就进入到了该对象的等待池中,进入到等待池中的线程不会去竞争改对象的锁

notifyAll会让所有处于等待池的线程全部进入锁池去竞争获取锁的机会

notify只会随机选取一个处于等待池中的线程进入锁池去竞争获取锁的机会

python的线程出现死锁(用例子理解并发编程中的)(3)

例子

我们用例子演示说明

开3个等待的线程,一个通知的线程,通知的线程里面调用notify方法

python的线程出现死锁(用例子理解并发编程中的)(4)

看到只有一个线程结束了,其余2个线程一直阻塞。

thread2 wait thread3 wait thread1 wait thread2 notify

将notifyTask中的notify换成notifyAll,输入如下,可以看到3个线程都正常结束

thread1 wait thread2 wait thread3 wait thread3 notify thread2 notify thread1 notify

推荐阅读:

IDEA自动生成测试类,提升一半工作效率

年后面试必会基础,如何控制多线程执行顺序?

大家的理解是怎样的呢?欢迎交流探讨

猜您喜欢: