我遇到了问题。我有一个管理餐厅的Java客户端 - 服务器应用程序;我只需要使用键盘输入和输出来管理它。
我的服务员类有两个线程:一个从输入读取命令,另一个连续监听(使用多播)一个需要传送到桌面的准备菜。
考虑到一切都是用键盘完成的,我的"订购"线程写入标准输出"您想订购吗? [Y / N]" "交付"等待答案。线程侦听要传递的内容
如果服务员选择订购某些东西,那么第二个线程在订单完成之前不会显示任何内容(使用状态布尔值完成);如果服务员是免费的(这意味着,正在显示提示:"你想要订购吗?")并且准备好的菜到了他将看到标准输入"有东西要交付。想送货吗? [Y / N]"并等待答案
我的问题是,无论他选择什么,我都无法控制哪个帖子会读到答案:他的意思是交付还是订购?
我尝试了很多可能性,每个人都不工作:
- 从输入关闭订购扫描仪,但它不能关闭;
- 暂停第一个帖子与另一个帖子,但你不能用Java做到这一点;
- 同步一切,不工作,因为线程要一起工作,而不是一次一个;
- 使用一些信号量/状态布尔值,但在这种情况下,我需要修改所有"排序"部分,包括一个检查信号量的无限循环(我无法在不停止一切的情况下使用获取或释放)。
关于如何解决问题的任何想法/提示?
答案 0 :(得分:0)
有一个线程,只有一个线程监听UDP。它可以将结果存储在线程安全集合中,供键盘线程读取或等待。