• ,

level26.lesson10.home01

package com.javarush.test.level26.lesson10.home01;

<code>import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/* Мир скучен для скучных людей.
Разберитесь с BlockingQueue
По образу и подобию класса Producer создайте класс Consumer, который будет выводить данные из BlockingQueue в консоль
*/
public class Solution {

    public static void main(String[] args) throws Exception {

        BlockingQueue queue = new ArrayBlockingQueue(32);

        Producer producer = new Producer(queue);
        Consumer consumer = new Consumer(queue);

        ExecutorService executorService = Executors.newCachedThreadPool();
        executorService.submit(producer);
        executorService.submit(consumer);

        Thread.sleep(2000);

        executorService.shutdownNow();

    }
}

=================
package com.javarush.test.level26.lesson10.home01;

import java.util.concurrent.BlockingQueue;

public class Producer implements Runnable {
    protected BlockingQueue queue;

    public Producer(BlockingQueue queue) {
        this.queue = queue;
    }

    public void run() {
        try {
            int i = 0;
            while (true) {
                queue.put(String.valueOf(i++));
                Thread.sleep(500);
            }
        } catch (InterruptedException e) {
            System.out.println(String.format("[%s] thread was terminated", Thread.currentThread().getName()));
        }
    }
}

=========================
package com.javarush.test.level26.lesson10.home01;

import java.util.concurrent.BlockingQueue;

/**
 * Created by Николай on 28.01.2017.
 */

public class Consumer implements Runnable {
    protected BlockingQueue queue;

    public Consumer(BlockingQueue queue) {
        this.queue = queue;
    }

    public void run() {
        Thread currentThread = Thread.currentThread();
        while (!currentThread.isInterrupted()) {
            if (!queue.isEmpty()) {
                System.out.println(queue.toString());
                queue.remove();
            }
        }
    }
}

Что не так?
Вывод:
[0]
[1]
[2]
[3]
[pool-1-thread-1] thread was terminated

6 комментариев

ss-20
  • ss-20
  • 0
  • Комментарий отредактирован 2017-01-28 01:02:41 пользователем ss-20
По образу и подобию класса Producer создайте класс Consumer...
а вы что-то свое придумываете(
попробуйте воспользоваться queue.take() и while такой же как у Producer.
MiX
  • MiX
  • 0
  • Комментарий отредактирован 2017-08-17 11:00:03 пользователем MiX
Помогите! Не пойму, что не так:-(
package com.javarush.task.task26.task2610;

import java.util.concurrent.BlockingQueue;

public class Consumer implements Runnable{
    private BlockingQueue queue;

    public Consumer(BlockingQueue queue) {
        this.queue = queue;
    }

    public void run() {
        try {
            int i = 0;
            while (true) {
                queue.put(String.valueOf(i++));
                Thread.sleep(300);
                System.out.println(queue.take());

            }
        } catch (InterruptedException e) {
            System.out.println(String.format("[%s] thread was terminated", Thread.currentThread().getName()));
        }
    }
}


Вывод:
0
0
1
1
2
2
[pool-1-thread-1] thread was terminated
[pool-1-thread-2] thread was terminated
lichMax
Consumer же должен только что-то брать из очереди, разве нет!? ;-)
MiX
Спасибо добрый человек! Слишком буквально понял: «По образу и подобию класса Producer создайте класс Consumer»
lichMax
Так и что, решил задачу?
MiX
Конечно
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.