【发布时间】:2019-07-24 14:54:06
【问题描述】:
我的任务是在终端打印货币汇率表,每分钟打印一次有延迟的表。在用户输入时,我将结束循环并返回海关终端菜单。如何做到这一点?
总的来说,我有一个问题要弄清楚如何获得无缝的用户体验。如果没有用户操作,我需要在终端中进行用户输入,并且仍然每分钟打印一次数据。最终,如果用户决定终止打印,如何完全终止整个数据打印循环? -> 运行标志 = ????;
这真的是正确的做法吗?
我尝试了几种方法,不幸的是,没有一种方法有效。
有人可以帮我吗?
到目前为止,我只有以下代码。循环打印汇率的自定义方法:
private void printExchangeRateTable(final Map<String, Integer> storedExchangeRates){
boolean runFlag = true;
do {
printExchangeRates(storedExchangeRates);
println("Hit any key to stop loop");
Thread threadDelayer = new Thread(new Delayer());
Thread threadListeningUserInput = new Thread(new UserInputListener());
threadDelayer.start();
threadListeningUserInput.start();
runFlag = ????;
} while (runFlag);
}
延迟对象
final class Delayer implements Runnable {
public static final long MILISECONDS = 1000L;
@Override
public void run(){
try {
Thread.sleep(60 * MILISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
用户输入监听器
class UserInputListener implements Runnable {
@Override
public void run() {
Scanner scanner = new Scanner(System.in);
val userInput = scanner.nextLine();
if(userInput != null) {
Thread.currentThread().interrupt();
}
}
}
【问题讨论】:
标签: java concurrency terminal