我有线程的分配,我不能让线程进入忙等待状态。 我如何知道线程是处于阻塞状态还是处于繁忙等待状态?是否有检查它的命令?
在程序中我有2个矩阵,我需要转换它们。所以我有一个转换线程,代码如下:
transformThread transformThreadFirst = new transformThread(firstMat, n);
transformThread transformThreadSecond = new transformThread(secondMat, n);
transformThreadFirst.start();
transformThreadSecond.start();
try
{
transformThreadFirst.join();
transformThreadSecond.join();
}
catch(InterruptedException e)
{
}
任何线程都将处于忙碌状态,或者它可以吗?或者你有更好的解决方案? 同样在transformThread的运行中,我不使用任何yield,只有2 for for循环,就是转换动作..
答案 0 :(得分:8)
Busy waiting正在反复做一些事情,直到另一个操作完成。像这样:
// The next line will be called many many times
// before the other thread finishes
while (otherThread.getState() == Thread.State.RUNNABLE) {}
所以你的代码不忙等待,当前线程将阻塞,直到transformThreadFirst结束,然后阻塞直到transformThreadSecond完成。
答案 1 :(得分:1)
有一个jstack实用程序。
将其用作jstack <pid>
,传递正在运行的jvm的进程ID。
它将显示该应用程序中的每个线程正在执行的操作,以及线程状态(RUNNING,WAITING,BLOCKED)。
它与JDK捆绑在一起,位于bin /
中