Я кодирую программу, которая генерирует случайное число между 1 и 1000. Затем он использует пул потоков из трех потоков для поиска определенных диапазонов чисел в более широком диапазоне от 1 до 1000. Потоки проверяют каждый номер в своем диапазоне и сравнивают его со случайным целевым номером, если он соответствует, сообщение в консоли говорит об этом. Если номер не совпадает, это также отражается в сообщении на консоли. Я пытаюсь выяснить, как закончить программу, как только достигнут целевой номер, и не продолжать анализировать числа, даже если цель уже найдена. Спасибо.Как остановить потоки в 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 -the-thread-in-java) –
@Ravindrababu: имейте в виду, что принятый ответ по этому вопросу не обрабатывает случай, когда задача выполняется в потоковом пуле, при использовании исполнителей вся процедура ручного волатильного флага не работает. –
Хорошо. Я отозвал свой голос. –