Java 睡眠线处于什么状态?
我正在寻找以下方面的验证/论据: 在任何时间点,一个线程正好位于5个线程中的一个(+1--2表示等待) 假设一个线程Java 睡眠线处于什么状态?,java,multithreading,concurrency,Java,Multithreading,Concurrency,我正在寻找以下方面的验证/论据: 在任何时间点,一个线程正好位于5个线程中的一个(+1--2表示等待) 假设一个线程T调用 睡眠(3000) 从而使自己进入睡眠状态3秒钟 在这3秒钟内它处于哪个状态 它显然是start()-ed并且仍然是活动的,因此既不是新的也不是终止的 它没有等待任何锁。事实上,它在调用之前没有释放任何锁,因此它没有被阻止 它不是在等待另一个线程。从某种意义上说,它本身在等待,但这不是waiting状态的规范。使线程进入等待状态的是以下调用之一:Object.wait()、t
T
调用
睡眠(3000)
从而使自己进入睡眠状态3秒钟
在这3秒钟内它处于哪个状态
它显然是start()
-ed并且仍然是活动的,因此既不是新的
也不是终止的
它没有等待任何锁。事实上,它在调用之前没有释放任何锁,因此它没有被阻止
它不是在等待另一个线程。从某种意义上说,它本身在等待,但这不是waiting
状态的规范。使线程进入等待状态的是以下调用之一:Object.wait()
、thread.join()
和LockSupport.park()
因此,它应该是RUNNABLE
——线程状态中唯一遗漏的一个。
然而,RUNNABLE
是一个线程在JVM上执行的状态——在CPU时间内启用,从而燃烧资源。
CPU调度上的休眠线程似乎是矛盾的
我有什么遗漏吗
蒂亚 Thead.State.TIMED\u的Javadoc正在等待: 具有指定等待时间的等待线程的线程状态。由于使用指定的正等待时间调用以下方法之一,线程处于定时等待状态:
Thread.sleep
超时对象。等待
超时Thread.join
LockSupport.parknos
LockSupport.parking直到
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());
}
}
它被阻塞了,它正在等待操作系统唤醒它,等待I/O.Re“RUNNABLE是线程在JVM上执行的状态”,当您谈论Java库的thread.getState()时,这是真的,但以防万一您感兴趣;在许多操作系统的术语中,“runnable”意味着线程没有“运行”,因为它正在等待一个可用的CPU在.thx上运行,以获得有用的ans.read waiting only-传递的TIMED_一直在等待。在我身上也发生了类似的事情,这让我来到了这里。