вы можете попробовать использовать класс 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();
}
}
}