在java中忙等待线程

时间:2009-05-14 10:37:09

标签: java multithreading

我有线程的分配,我不能让线程进入忙等待状态。 我如何知道线程是处于阻塞状态还是处于繁忙等待状态?是否有检查它的命令?

在程序中我有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循环,就是转换动作..

2 个答案:

答案 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 /