Java线程中Java线程的状态可以通过举行:什么是等待,无法获得锁
- 无法获取的锁。
- 正在通过wait()方法举行。
以上两种情况在Java线程状态方面有什么区别?
考虑以下简单的代码:
synchronized(object) {
object.wait();
System.out.println("Completed.");
}
如果两个线程(说的ThreadA和ThreadB)都被关押在wait()方法。例如,当另一个线程调用notifyAll()时,ThreadA将从等待中恢复并获取对象的锁定并继续。 ThreadB也会复活,但无法获取对象的锁定并保持到ThreadA退出同步块为止。 ThreadB然后获得锁并继续。
其结果将是两个“已完成”被打印。
在这个例子中,必须有当从ThreadB变化“正在举行的wait()”到“正在举行,因为它是无法获得对象的锁”的时间。
我想知道它是如何工作的内部Java编写的。请帮忙。
基于'enum Thread.State'的Javadoc(我还没有试过实验),状态应该从'WAITING'变成'BLOCKED'。也许你可以做实验,看看我是否正确。 –
这个[answer](http://stackoverflow.com/a/28726421/6238076)已经非常详细地解释了所有等待线程在收到通知后的行为。 – gdlmx