在线程

时间:2018-03-17 18:25:27

标签: multithreading threadpool wait executorservice notify

如何在线程池创建的线程之间切换?我创建了很多线程,但我只想要一个线程打印一些东西而其他线程处于等待状态。现在打印后,我希望这个线程进入等待状态,其他一些线程获取此锁并打印就像前一个线程一样,然后进入等待状态。该模拟一次又一次地发生,直到某些条件满足为止。获取锁的线程随机化,并且不需要按顺序排列。如果可能的话,你可以解释我怎样才能实现这一点,以便使用队列。

我是线程的新手,所以我试图实现的目标如下。我知道它错了,但我希望你能给出一个解决方案,并根据我想要达到的目标做出一点解释。

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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

无法以编程方式控制线程实例化的顺序。线程及其执行的优先级由特定操作系统的线程调度算法实现决定。