Roa*_*oam 4 java concurrency multithreading
我正在寻找以下的验证/参数:
在任何时间点,线程都处于5(+1 - 2 for WAITING)状态中的一个.
假设一个线程T调用
了Thread.sleep(3000);
从而使自己进入睡眠状态3秒钟.
在这3秒内它处于哪种状态?
它显然start()已经存在并且仍然存在,因此既不是NEW也不存在TERMINATED.
它没有等待任何锁定.事实上,它没有释放它在此次调用之前的任何锁定,所以事实并非如此BLOCKED.
它不是在等待另一个线程.在某种意义上等待自己 - 但这不是国家的规范WAITING.什么得到一个线程进入一个WAITING状态是其中一个呼叫:Object.wait(),Thread.join()和LockSupport.park().
所以它应该是RUNNABLE- 线程状态中唯一遗漏的一个.但是,RUNNABLE线程正在JVM上执行的状态 - 是否为CPU时间启用,从而用于刻录资源.处于CPU时间表的睡眠线程似乎是矛盾的.
我错过了什么吗?
TIA.
Thead.State.TIMED_WAITING的Javadoc 读取:
具有指定等待时间的等待线程的线程状态.由于在指定的正等待时间内调用以下方法之一,线程处于定时等待状态:
Thread.sleepObject.wait超时Thread.join超时LockSupport.parkNanosLockSupport.parkUntil
实际上,以下测试程序打印TIMED_WAITING:
public class Test {
public static void main(String[] args) throws Exception {
Thread t = new Thread() {
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
};
t.start();
Thread.sleep(100); // make sure the other thread has started
System.out.println(t.getState());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2893 次 |
| 最近记录: |