Действия блока до тех пор, пока список не станет пустым с java .util.concurrent - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужна твоя помощь. Я должен использовать пакет java .util.concurrent в своем упражнении, но я не знаю, как это сделать. Вопрос только о методе get.

public String getInput() {
        if (inputList.isEmpty()) return null;
        String input = inputList.get(0);
        inputList.remove(0);
        return input;
}

Как мне написать код, чтобы дождаться, пока данный список (переменная: inputList) не станет пустым?

Привет

1 Ответ

0 голосов
/ 07 апреля 2020

вы можете попробовать использовать класс LinkedBlockingDeque из пакета java.util.concurrent, который реализует интерфейс BlockingDeque.

позволяет добавлять элементы в блок методов BlockingDeque и take* до тех пор, пока не появится доступный элемент, и удалять его после извлечения. Взгляните на Javado c

Вот пример:

public class Queue {

    BlockingDeque<String> inputList = new LinkedBlockingDeque<>();

    public String getInput() {
        try {
            System.out.println("waiting on queue");
            String input = inputList.takeFirst();
            System.out.println("taken " + input);
            return input;
        } catch (InterruptedException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {

        Queue queue = new Queue();

        new Thread(() -> {
            try {
                Thread.sleep(4000);
                queue.inputList.add("string");
                System.out.println("added string");
                Thread.sleep(2000);
                queue.inputList.add("string1");
                System.out.println("added string 1");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        for (int i = 0; i < 2; i++){
            queue.getInput();
        }
    }

}
...