【发布时间】:2017-01-06 01:09:14
【问题描述】:
我是 Java 新手,我正在尝试使用一个线程来完成另一个线程中的循环,而不管循环的状态如何。
public static void main(String[] args) {
// Either start the other thread here
while(true){
// Or here, not quite sure
// Do stuff
}
}
}
public class Timer implements Runnable{
@Override
public void run() {
long start = System.currentTimeMillis();
while(true) {
long current = System.currentTimeMillis();
if(current - start == 10000){
// How do I notify the loop in main to break?
break;
}
}
}
}
我要做的是在 10 秒后在 main 中结束循环,无论其循环的状态如何,因为循环包含从System.in 读取的Scanner,并且它需要在 10 秒后停止,无论从键盘读取的内容与否。我认为最好的解决方案是运行一个计时器线程来计算秒数,然后在 10 秒后以某种方式通知另一个线程中的循环中断,但是,我不知道如何实现这个......
【问题讨论】:
-
为什么需要另一个线程来计算时间?
-
我想我需要另一个线程,这样它就不会干扰在主循环中执行的步骤。
-
您认为最好的解决方案是编写一个线程来执行您实际上并不希望它执行的操作,然后让其他线程介入并使其执行正确的操作?嗯,没有。最好的办法是编写线程代码来执行您真正希望它执行的操作,并且只执行您想要执行的操作。这样您就不必强迫它做正确的事情。
-
用循环正确编码线程。这是错误的做法。
-
好的,我设法解决了这个问题:我交换了循环和计数器,以便 Main 包含计时器(带有毫秒的循环),而另一个线程包含带有 Scanner 的循环。读取线()。当主循环达到 10 秒时,它会中断,并调用另一个线程停止:Thread.interrupt()。虽然我对 Thread.interrupt() 没有停止 Scanner.readline(); 感到惊讶,但调用 System.exit(0) 确实停止了它,因此程序总体上具有预期的功能。谢谢大家的帮助!
标签: java multithreading timer while-loop