线程状态WAIT和线程状态BLOCKED之间有什么区别?
已
阻止等待监视器锁定的线程处于此状态.正在
等待另一个线程无限期地执行特定操作的线程处于此状态
没有解释给我的区别.
我的印象是wait()释放所有锁,但我发现这篇帖子说的
"在同步方法中调用wait是一种获取内部锁的简单方法"
请澄清我有点困惑.
http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html
我有一个具有传入作业队列的线程(LinkedList包含作业说明).wait()当没有工作要做时,线程会阻塞队列.外部作业调度程序对象notify()在将新作业放入队列时将其唤醒.
在关闭我的程序时,我调用interrupt()线程.InterruptedException当线程等待工作时,这会引发wait().我的问题是:如果我在没有阻塞但是做某种工作的情况下中断线程会发生什么,处理后的项目是队列中的最后一个(所以队列现在是空的)并且执行isInterrupted()在设置中断标志之前超过了检查所以wait()再次打电话?它会抛出一个InterruptedException因为已经设置了中断标志还是线程永远等待,因为新的作业永远不会到达队列并且没有人可以中断等待?
根据Java线程状态信息调用wait()将导致线程进入BLOCKED状态.但是,这段代码将在WAITING状态的Thread中生成(在被调用之后).
class bThread extends Thread {
public synchronized void run() {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有什么不对吗?任何人都可以向我解释这种行为吗?任何帮助,将不胜感激!