Java中多个线程等待获取同步锁,那没有被唤醒的线程执行完后释放掉锁后又会把锁给给谁呢?
Java中多个线程等待获取同步锁,我们都知道notify方法只能唤醒一个线程,那没有被唤醒的其他线程怎么办,怎么处理呢?被唤醒的线程执行完后释放掉锁后又会把锁给谁呢?...
Java中多个线程等待获取同步锁,我们都知道notify方法只能唤醒一个线程,那没有被唤醒的其他线程怎么办,怎么处理呢?被唤醒的线程执行完后释放掉锁后又会把锁给谁呢?
展开
1个回答
2014-05-14 · 知道合伙人数码行家
关注
展开全部
您好,提问者:
1、如果一个线程执行中途遇到wait()了,就会休眠在线程池中。
2、如果一个线程执行完毕了,就会消失掉。
3、如果一个线程没有被执行完,那么这个线程有可能会被挂掉,或者一直存放到线程池中等待notify()唤醒,再者就是线程挂掉,Gc线程检测无用回收掉。
1、如果一个线程执行中途遇到wait()了,就会休眠在线程池中。
2、如果一个线程执行完毕了,就会消失掉。
3、如果一个线程没有被执行完,那么这个线程有可能会被挂掉,或者一直存放到线程池中等待notify()唤醒,再者就是线程挂掉,Gc线程检测无用回收掉。
追问
有三个线程T1,T2,T3都在等待被唤醒,在另一个线程Tx的同步代码中调用了notify,一个被唤醒了,还有两个没有被唤醒。假设T1执行完了,T1释放了对象的锁,但是这个锁没有给另外两个线程,他们还在等。当Tx线程完全执行完后,这个锁会自动给T2、T3,我郁闷就是这个地方,就好像Tx把锁给了T1,T1又把锁给了Tx,T2、T3依然在等待,当Tx执行完,锁就给了T2、T3。不知道怎么解释
追答
应该会等待,没有被唤醒的话就一直是等待状态,直到程序停止,线程丢失。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询