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,请认识到一个线程不能导致另一个线程忙着等待,这更多是您自己线程的行为造成的。检查标志的任何类型的循环都是忙等待,而阻塞的任何命令都不是。总之:你不能让别人忙着等,只有你自己。