[求助]如何判断一个线程或一组线程的当前状态是否为阻塞 我想问下,有没有什么方法可以知到线程的状态是否为阻塞?谢谢各位了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Thread.getState()public Thread.State getState()返回该线程的状态。 该方法用于监视系统状态,不用于同步控制。public static enum Thread.Stateextends Enum<Thread.State>线程状态。线程可以处于下列状态之一: NEW至今尚未启动的线程处于这种状态。 RUNNABLE正在 Java 虚拟机中执行的线程处于这种状态。 BLOCKED受阻塞并等待某个监视器锁的线程处于这种状态。 WAITING无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。 TIMED_WAITING等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。 TERMINATED已退出的线程处于这种状态。 在给定时间点上,一个线程只能处于一种状态。这些状态是虚拟机状态,它们并没有反映所有操作系统线程状态。 呵呵,上楼说的方法不行,如:public class DFDFDFDFD { public static void main(String[] args) throws InterruptedException{ Thread th=new Thread(new Runnable(){ public void run(){ Scanner in=new Scanner(System.in); String s=in.next(); System.out.println("*"); } }); th.start(); Thread.sleep(500); System.out.println(th.getState()); }}这时输出的为:RUNNABLE IO的阻塞是很特殊的吧State.BLOCKED只能针对Object.wait()做出反应 当然是RUNNABLE!Thread.sleep(500); System.out.println(th.getState()); //这里只有Sleep之后才会执行,所以线程已经开始运行了,所以是RUNNABLE你必须在另外一个线程中打印信息才可能列出BLOCK 不懂上楼的意思,th引用的线程对像不是在IO阻塞中吗?那个线程一在在阻塞,和Sleep没关系。 程序在myEclipse中可以运行 在命令行里运行出错 C++指针引用形参问题 一个流程图的图像表示转换为二维数组的实现方法问题,急!!!! JTable表行的渲染(根据方向列的值) 请帮我一下好吗??这是怎么回事 怎么把一个Socket服务端的输出流结束(服务端与客户端双向通信问题),即避免客户端阻塞. 请教大虾lucene返回的hits怎么取到想要的值? 问了很多论坛都没有解决的JDBC问题: 一个非常非常简单的问题 jdbc的奇怪问题 Java初级问题求教 word文档页数
public Thread.State getState()返回该线程的状态。 该方法用于监视系统状态,不用于同步控制。public static enum Thread.Stateextends Enum<Thread.State>线程状态。线程可以处于下列状态之一: NEW
至今尚未启动的线程处于这种状态。
RUNNABLE
正在 Java 虚拟机中执行的线程处于这种状态。
BLOCKED
受阻塞并等待某个监视器锁的线程处于这种状态。
WAITING
无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。
TIMED_WAITING
等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。
TERMINATED
已退出的线程处于这种状态。
在给定时间点上,一个线程只能处于一种状态。这些状态是虚拟机状态,它们并没有反映所有操作系统线程状态。
public class DFDFDFDFD {
public static void main(String[] args) throws InterruptedException{
Thread th=new Thread(new Runnable(){
public void run(){
Scanner in=new Scanner(System.in);
String s=in.next();
System.out.println("*");
}
});
th.start();
Thread.sleep(500);
System.out.println(th.getState());
}
}
这时输出的为:RUNNABLE
State.BLOCKED只能针对Object.wait()做出反应
System.out.println(th.getState()); //这里只有Sleep之后才会执行,所以线程已经开始运行了,所以是RUNNABLE
你必须在另外一个线程中打印信息才可能列出BLOCK