我正在编写一个生成1到1,000之间的随机数的程序。然后它使用三个线程的线程池搜索范围更广的1到1,000范围内的某些数字范围。线程检查其范围内的每个数字,并将它与随机目标数字进行比较,如果匹配,则消息传递给控制台。如果号码不匹配,这也会反映到控制台的消息中。我想知道如何在达到目标数字后结束程序,并且即使目标已经找到,也不要继续分析数字。谢谢。如何在Java中停止线程
这是FindIt类:
/** fill in later */
public class FindIt extends Thread
{
private int numToFind;
private int numToStart;
private int numToEnd;
public FindIt(int nF, int nS, int nE)
{
numToFind = nF;
numToStart = nS;
numToEnd = nE;
}
public void run()
{
int counter = 0;
int numAt = numToStart;
for (int i = 0; i < (numToEnd - numToStart) + 1; i++)
{
counter++;
if (counter == 10)
{
counter = 0;
Thread.yield();
}
if (numAt++ == numToFind)
{
System.out.println("The target number, " + numToFind + ", has been found by " + Thread.currentThread().getName() + ".");
}
else
{
System.out.println(Thread.currentThread().getName() + " has analyzed the number " + (numAt - 1) + " - not the target number.");
}
}
}
}
这是主要的方法的程序:
import java.util.Random; //imports Java's Random class
import java.util.concurrent.*;
/** fill in later */
public class NumberSearch
{
public static void main(String [] args)
{
Random r = new Random(); //creates an instance of the Random class
int randomNum = r.nextInt(1001); //declares the integer randomNum and initilizes it to be a random interger in the range 0 inclusive to 1001 exclusive
ExecutorService executor = Executors.newFixedThreadPool(3);
FindIt find1 = new FindIt(randomNum, 0, 349);
FindIt find2 = new FindIt(randomNum, 350, 699);
FindIt find3 = new FindIt(randomNum, 700, 1000);
executor.execute(find1);
executor.execute(find2);
executor.execute(find3);
executor.shutdown();
}
}
的可能的复制[?如何正确地停止在Java线程(http://stackoverflow.com/questions/10961714/how-to-properly-stop -ja-thread-in-java) –
@Ravindrababu:请注意,在该问题上接受的答案不能处理任务在线程池中运行的情况,当使用Executors时,整个手动滚动易失性标志方法失败。 –
好的。我撤回了我的投票。 –