В настоящее время я работаю над проектом, в котором у меня есть по существу 10 нитей, которые «спят». Случайно один из этих 10 потоков должен «проснуться» и начать делать некоторые работы. Я просто хочу посмотреть, пойду ли я в правильном направлении. Поэтому я должен просто создать каждый экземпляр потока, например.Спящие темы в JAVA
Thread thread0 = new Thread(new doWork());
...
Thread thread9 = new Thread(new doWork());
и просто не запускать их, а затем, когда они должны «разбудить» просто вызовите start()
метод на конкретной теме ..
или я должен начать каждый поток, но у них wait()
, пока я не называю notify()
способ?
или я должен начать тему и использовать sleep()
, а затем позвонить по методу interrupt()
?
Какой подход кажется лучше и почему?
Любое понимание очень ценится.
Редактировать Будет ли это приемлемо ??
import java.util.Random;
public class Client {
private static Thread [] clients = new Thread[10];
public static void main(String[] args){
createClients();
randomWake();
}// end main()
static void createClients(){
Thread client0 = new Thread(new ClientThread(0));
clients[0] = client0;
Thread client1 = new Thread(new ClientThread(1));
clients[1] = client1;
Thread client2 = new Thread(new ClientThread(2));
clients[2] = client2;
Thread client3 = new Thread(new ClientThread(3));
clients[3] = client3;
Thread client4 = new Thread(new ClientThread(4));
clients[4] = client4;
Thread client5 = new Thread(new ClientThread(5));
clients[5] = client5;
Thread client6 = new Thread(new ClientThread(6));
clients[6] = client6;
Thread client7 = new Thread(new ClientThread(7));
clients[7] = client7;
Thread client8 = new Thread(new ClientThread(8));
clients[8] = client8;
Thread client9 = new Thread(new ClientThread(9));
clients[9] = client9;
for(int i = 0; i < clients.length; i++)
clients[i].start();
}// end createClients()
static void randomWake(){
Random rand = new Random();
int randomNumber = rand.nextInt(10);
clients[randomNumber].interrupt();
}// end randomWake()
static class ClientThread implements Runnable{
private int clientNumber;
public ClientThread(int clientNumber){
this.clientNumber = clientNumber;
}// end ClientThread(int clientNumber)
public void run(){
while(!Thread.interrupted()){}
System.out.println("Client " + clientNumber + " is awake!");
}// end run()
}// end class ClientThread
} // конец класса Client
Как насчет ExecutorService исполнитель = Executors.newFixedThreadPool (10); ? – chro
@cho: Это может произойти событие. Hower вопрос утверждает, что потоки активируются «случайно» ... –