在java中忙等待线程

2 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)
{
}
Run Code Online (Sandbox Code Playgroud)

任何线程都将处于忙碌状态等待还是可以的?或者你有更好的解决方案?同样在transformThread的运行中我不使用任何yield,只有2 for循环,就是它,只是转换动作..

sou*_*rge 8

忙碌的等待是反复做的事情,直到另一个操作结束.像这样的东西:

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

所以,你的代码是不是忙等待,当前线程将被阻塞,直到transformThreadFirst完成,然后阻塞,直到transformThreadSecond完成.

  • 是的,join()将阻止当前线程,这是等待事情发生的正确方法. (2认同)
  • @Greg - 我同意soulmerge的解释,join()是正确的方法,但为了你的利益greg,意识到一个线程不能导致另一个忙等待,这是你的OWN线程的行为更多.检查标志的任何类型的循环都是忙等待,而任何阻塞的命令都不是.总结:你不能让某些人忙着等待,只有你自己. (2认同)