したがって、ランダムに生成された番号を見つけようとする3つのスレッドがあります(各スレッドにはstartNumとfinishNumという独自の範囲があります)。番号が見つかったために1つが停止した場合は、他のすべてのスレッドも停止します。
「揮発性」ブール値について読んだことがあります。これは明らかにすべてのスレッドが共有するブール値であるため、常に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()メソッドは次のとおりです。intrandomNum =(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();