所以我有 3 个线程会尝试找到一个随机生成的数字(每个线程都有自己的范围,即 startNum 和 finishNum)。如果其中一个因为找到数字而停止,我希望所有其他线程也停止。
我读过一个“易失性”布尔值,它显然是一个所有线程共享的布尔值,因此它始终为 1 值。
这是我拥有的代码:(注意:如果线程“停止”,而其他线程仍在进行中,则可以,因为它的 startNumber 超过了它的 finishNumber)
private volatile boolean numberFound = false;
public void run()
{
while(startNum < finishNum) //what i'm talking about with the [note]
{
search( startNum);
if(numberFound == true)
{
break;
}
}
}
private synchronized void search(int startNum)
{
for(int i = 0; i < 10; i++)
{
if( startNum != searchNum )
{
startNum++;
}
else if(startNum == searchNum )
{
numberFound = true;
System.out.println( this.currentThread().getName() + " has found the number: " + searchNum );
break;
}
}
}
哦,还有,我让它循环 10 次,因为我希望程序在每个数字(线程)范围内检查数字 10 次,然后移动到另一个。
这是根据请求启动线程的 main() 方法: int randomNum = (int)(Math.random() * 1001);
FindIt t1 = new FindIt(randomNum, 0, 349); //FindIt extends Thread
FindIt t2 = new FindIt(randomNum, 350, 699);
FindIt t3 = new FindIt(randomNum, 700, 1000);
t1.start();
t2.start();
t3.start();