Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的忙等待线程_Java_Multithreading - Fatal编程技术网

java中的忙等待线程

java中的忙等待线程,java,multithreading,Java,Multithreading,我有一个线程分配,我不能让线程进入忙等待状态。 如何知道线程是处于阻塞状态还是处于忙等待状态?是否有检查它的命令 在程序中,我有两个矩阵,我需要对它们进行变换。我有一个转换线程,代码如下: transformThread transformThreadFirst = new transformThread(firstMat, n); transformThread transformThreadSecond = new transformThread(secondMat, n); transf

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

在程序中,我有两个矩阵,我需要对它们进行变换。我有一个转换线程,代码如下:

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个用于循环,就是这样,只有transform操作。

有一个jstack实用程序。 将其用作
jstack
,传递正在运行的jvm的进程id。 它将显示该应用程序中的每个线程正在做什么,以及线程状态(正在运行、正在等待、已阻止)

它与JDK捆绑在一起,并位于其bin中/

重复执行某项操作,直到另一项操作完成。大概是这样的:

// The next line will be called many many times
// before the other thread finishes
while (otherThread.getState() == Thread.State.RUNNABLE) {}

因此,您的代码没有忙着等待,当前线程将阻塞,直到transformThreadFirst完成,然后阻塞,直到transformThreadSecond完成。

因此,一般来说,我可以使用“join()”命令,而不用担心我会忙着等待另一个线程吗?是的,join()将阻塞当前线程,哪一种是等待某事发生的正确方式。@Greg-我同意soulmerge的解释,join()是正确的方法,但为了您的利益,Greg,请认识到一个线程不能导致另一个线程忙着等待,这更多是您自己线程的行为造成的。检查标志的任何类型的循环都是忙等待,而阻塞的任何命令都不是。总之:你不能让别人忙着等,只有你自己。