我有两个功能,一个是主设备,另一个是从设备。通过主函数我正在尝试学习其他函数的行为。但我应该做任何计算是一个设定的时间间隔。在这一部分中,如何设置一个计时器,如果发生超时则标记为布尔变量,并了解是否发生超时?
func1 -----send message------> func2
start timer
if timeout occur, do something else
答案 0 :(得分:5)
您可以在另一个线程中执行func2
,并让原始线程join()
具有指定的超时。
当然,您需要注意正确的同步。
简单示例(遗漏InteruptedException
处理)
void func1(){
Thread slave = new Thread(new Runnable(){
public void run(){
func2();
}
});
slave.start();
slave.join(100); // waits 100 milliseconds for slave to complete
if(!slave.isAlive()){
//slave completed its task
}else{
//slave not done yet, do something else
somethingElse();
}
}
答案 1 :(得分:2)
使用JDK中的并发构造。在这种情况下,ExecutorService
和CountDownLatch
是完美匹配:
ExecutorService executor = Executors.newCachedThreadPool();
final CountDownLatch ready = new CountDownLatch(1);
executor.execute(new Runnable() {
@Override
public void run() {
// do something here
System.out.println("working ...");
ready.countDown();
}
});
boolean timeout = !ready.await(1, TimeUnit.MILLISECONDS);
if (timeout) {
doSomethingElse();
}