如何在java中实现超时以查看响应是否到来

时间:2013-05-05 15:13:12

标签: java

我有两个功能,一个是主设备,另一个是从设备。通过主函数我正在尝试学习其他函数的行为。但我应该做任何计算是一个设定的时间间隔。在这一部分中,如何设置一个计时器,如果发生超时则标记为布尔变量,并了解是否发生超时?

func1   -----send message------>   func2  
             start timer
             if timeout occur, do something else

2 个答案:

答案 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中的并发构造。在这种情况下,ExecutorServiceCountDownLatch是完美匹配:

    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();
    }