Задать вопрос
GooInLove
@GooInLove

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

Имею массив из трех элементов, допустим, "a", "b", "c". И три потока. Как добиться того, чтобы каждый из трех потоков работал только с одним элементом, на который выпадет его очередь?
То есть поток 1 должен работать с элементом "a", поток 2 - с элементом "b" и поток 3 - с элементом "c".
  • Вопрос задан
  • 355 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Java-разработчик
    14 месяцев
    Далее
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
Решения вопроса 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();
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы