Java 暂停另一个线程的线程:如何暂停或替代

Java 暂停另一个线程的线程:如何暂停或替代,java,multithreading,Java,Multithreading,我面临一个问题。我有一个管理餐厅的Java客户机-服务器应用程序;我只需要使用键盘输入和输出来管理它。 我的侍者类有两个线程:一个线程从输入中读取订单,另一个线程持续侦听(使用多播)需要送到餐桌上的现成菜肴。 考虑到一切都是用键盘来完成的,我的“订购”线程将写入标准输出“您想下订单吗?[y/n]”并等待回答,“交货”线程侦听要交货的东西。 如果服务员选择点菜,那么第二个线程在点菜完成之前不会显示任何内容(使用状态布尔值完成);如果服务员有空(这意味着,正在显示提示:“您要点菜吗?”),并且一道现

我面临一个问题。我有一个管理餐厅的Java客户机-服务器应用程序;我只需要使用键盘输入和输出来管理它。 我的侍者类有两个线程:一个线程从输入中读取订单,另一个线程持续侦听(使用多播)需要送到餐桌上的现成菜肴。
考虑到一切都是用键盘来完成的,我的“订购”线程将写入标准输出“您想下订单吗?[y/n]”并等待回答,“交货”线程侦听要交货的东西。
如果服务员选择点菜,那么第二个线程在点菜完成之前不会显示任何内容(使用状态布尔值完成);如果服务员有空(这意味着,正在显示提示:“您要点菜吗?”),并且一道现成的菜到了,他将在标准输入中看到“有东西要送。要送吗?[y/n]”,然后等待回答。
我的问题是,无论他选择什么,我都无法控制哪个线程将读取答案:他是要交付还是要订购?
我尝试了很多可能性,但每个人都不工作:
-从输入关闭订购扫描仪,但无法关闭
-暂停另一个线程的第一个线程,但在Java中不能这样做
-同步所有内容,不工作,因为线程要一起工作,而不是一次一个线程
-使用一些信号量/状态布尔值,但在这种情况下,我需要修改所有“排序”部分,包括检查该信号量的无限循环(如果不停止所有操作,我无法使用acquire或release)。

关于如何解决这个问题有什么想法/提示吗?

有一个线程,只有一个线程在监听UDP。它可以将结果存储在线程安全的集合中,供键盘线程读取或等待。

您确定线程是解决此问题的正确方法吗?请格式化您的帖子好吗?很难读懂这样一堆文字。@immibis如果您有任何提示,欢迎您。目前,这是我唯一能想到的of@tenik除非你真的知道自己在做什么,否则不要使用线程。你不知道自己在做什么,所以不要使用线程。让线程以您希望的方式进行合作真的很难。(非合作线程,比如独立于任何其他线程进行一些繁重处理,然后设置结果,然后退出的线程都可以)但我的问题不是,我的问题是,当我必须使用键盘做一些事情时,我有两个线程同时在听,这意味着我不知道哪一个线程将读取我的输入;由于问题的性质,我无法同步。@tenik好的,有一个且只有一个线程从键盘读取数据,还有一个且只有一个线程在监听UDP。人类是单线程的,如果有两件事问他们,他们不知道自己在回答哪件事。