У меня проблема с реализацией Reader/Writer. Я должен написать класс Reader, который берет строку из консоли и добавляет ее в очередь, и класс Writer, который удаляет строку из той же очереди и выводит ее на консоль с помощью потоков. Я написал свою программу только для одной строки (введите одну строку, и она выведет эту строку через очередь), и это сработало отлично. Теперь я изо всех сил пытаюсь сделать так, чтобы я мог вводить несколько строк, нажимать Enter, а затем Reader добавляет их в очередь, а Writer затем отображает их. Если введена строка quit
, оба потока должны быть остановлены, и программа должна завершиться.
Моя идея с читателем выглядит так:
Scanner k = new Scanner(System.in);
in = k.nextLine();
if(in.equals("quit"))
System.exit(0);
synchronized(q){
while(!(in.equals("quit"))){
// System.out.println(q.isEmpty());
q.enqueue(in);
in = k.next();
if(in.equals("quit"))
System.exit(0);
}
}
И мой Writer выглядит так:
public void run(){
synchronized(q){
while(!q.isEmpty()){
String out = q.dequeue();
System.out.println(out);
}
}
}
Мой Reader, похоже, работает нормально, так как я встроил Sys.out.(q.isEmpty)
после добавления в очередь. Он показывает мне, что очередь заполняется, но ничего не выводится на консоль из класса Writer. Запись quit
останавливает программу без проблем.
Я не думаю, что прекрасно понимаю темы. Мой основной метод просто создает потоки с Thread t1 = new Thread(new Reader(queue));
и то же самое для Writer
, а затем запускает оба потока.