【发布时间】:2020-04-05 02:27:34
【问题描述】:
我的阅读器/写入器实现存在问题。我应该编写一个 Reader 类,该类从控制台获取一个 String 并将其添加到 Queue 和一个 Writer 类,该类使用 Threads 从同一队列中删除 String 并将其输出到控制台。我只为一个字符串编写了我的程序(输入一个字符串并通过队列输出该字符串)并且效果很好。现在我正在努力做到这一点,以便我可以输入多个字符串,按 Enter,然后阅读器将其添加到队列中,然后编写器显示它。如果键入字符串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);
}
}
}
我的阅读器似乎工作正常,因为我在添加到队列后内置了Sys.out.(q.isEmpty)。它向我显示队列正在填满,但没有任何内容从 Writer 类输出到控制台。写quit 停止程序没有问题。
我不认为我完全理解线程。我的主要方法只是使用Thread t1 = new Thread(new Reader(queue)); 创建线程,并为Writer 创建相同的线程,然后启动两个线程。
【问题讨论】:
-
提醒我,开学已经有一段时间了:Reader/Writer 涉及到 reader 的 read lock,以及 writer 的 write lock(排他锁),对吗?我看不出你是如何通过这样一个简单的同步块来实现的。
标签: java loops java-threads reader writer