在SO上有很多关于中断读取system.in的线程的帖子,但我在这里寻求的是如何最好地编写我想要实现的代码的建议。
我有一个 getlogin() 方法需要执行以下操作:要求用户输入所需的登录环境详细信息,如果6秒后用户没有输入有效值("live"或"test"),则将 userlogin 变量设置为 "test" 并返回给调用者。
对于 getlogin() 实现,我采取了以下方法:
1.启动两个线程,它们分别执行以下操作:
- thread1 创建扫描器对象,然后调用 scanner.nextline() 并根据用户输入设置变量 userlogin。在退出 thread1 之前中断 thread2。
- thread2 等待6秒,如果在此后仍未设置 userlogin,则为 userlogin 设置默认值。在退出 thread2 之前中断 thread1。
2.加入 thread2,以防止主线程将 userlogin 返回为空
3.返回 userlogin
我对这种方法的问题在于,scanner.nextline() 在 thread2 调用 thread1.interrupt 时不会中断,这就是为什么我在步骤2中没有加入 thread1 的原因,因为主线程会挂起。是否有一种方法让 thread1 在 thread2 中断后完成?还是说这种方法完全过度设计,有更简单的方法来实现这个契约?
我对这种方法的问题在于,scanner.nextline() 在 thread2 调用 thread1.interrupt 时不会中断,这就是为什么我在步骤2中没有加入 thread1 的原因,因为主线程会挂起。是否有一种方法让 thread1 在 thread2 中断后完成?还是说这种方法完全过度设计,有更简单的方法来实现这个契约?
available
是最简单的。一个轮询。虽然它本身不会中断,但它确保在有数据时发生阻塞。然而,没有必要像被接受的答案那样使用awt。如果您通过类似于我的搜索找到了这个问题,请向下滚动查看Mathkute的答案。 - LAFK says Reinstate Monica