GooInLove
@GooInLove

Как работать с потоками?

Имею массив из трех элементов, допустим, "a", "b", "c". И три потока. Как добиться того, чтобы каждый из трех потоков работал только с одним элементом, на который выпадет его очередь?
То есть поток 1 должен работать с элементом "a", поток 2 - с элементом "b" и поток 3 - с элементом "c".
  • Вопрос задан
  • 354 просмотра
Решения вопроса 1
angry_cellophane
@angry_cellophane
public class Main {

    public static final int WORKERS_COUNT = 3;

    private static class Worker implements Runnable {

        private final BlockingQueue<Integer> queue;
        private final int number;

        private Worker(BlockingQueue<Integer> queue, int number) {
            this.queue = queue;
            this.number = number;
        }

        @Override public void run() {
            try {
                Integer i = queue.take();
                System.out.println("number: "+number+", i ="+i);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public static void main(String[] args) {
        BlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
        queue.add(1);
        queue.add(2);
        queue.add(3);

        ExecutorService pool = Executors.newFixedThreadPool(WORKERS_COUNT);
        for (int i = 0; i < WORKERS_COUNT; i++) {
            pool.execute(new Worker(queue, i));
        }
        pool.shutdown();
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы