如何在线程池创建的线程之间切换?我创建了很多线程,但我只想要一个线程打印一些东西而其他线程处于等待状态。现在打印后,我希望这个线程进入等待状态,其他一些线程获取此锁并打印就像前一个线程一样,然后进入等待状态。该模拟一次又一次地发生,直到某些条件满足为止。获取锁的线程随机化,并且不需要按顺序排列。如果可能的话,你可以解释我怎样才能实现这一点,以便使用队列。
我是线程的新手,所以我试图实现的目标如下。我知道它错了,但我希望你能给出一个解决方案,并根据我想要达到的目标做出一点解释。
public class Processor implements Runnable{
private int id;
public Processor(int id) {
this.id = id;
}
@Override
public void run() {
int count=0;
System.out.println("Starting process id: " + id);
while(count<100) {
System.out.println("Pausing process id: "+id);
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
notifyAll();
System.out.println("Resuming process id: "+id);
count++;
}
System.out.println("Completed process id: " + id);
}
}
public class Test {
@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.print("Enter number of processes you want to create: ");
int n = reader.nextInt();
ExecutorService executor = Executors.newFixedThreadPool(n);
for(int i=1;i<=n; i++) {
executor.submit(new Processor(i));
}
executor.shutdown();
try {
executor.awaitTermination(10, TimeUnit.MINUTES);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
答案 0 :(得分:0)
无法以编程方式控制线程实例化的顺序。线程及其执行的优先级由特定操作系统的线程调度算法实现决定。