如何实现基于事件的计时器?

时间:2018-03-13 17:05:03

标签: java

我正在尝试编写一个事件中断代码。 这是一小段代码,我被卡住了。

//some code here
long current_time=System.currentTimeMillis();
long end=current_time+10*1000;//a timer limit of 10 seconds
Packet_ packet_=new Packet_();
while(end>System.currentTimeMillis()){
    packet_ = receivePacket();//System waits for the packet to arrive on the socket in the receivePacket function.
    break;
    }
packet_.printPacketDetails();
//some code here

在这里,我将结束变量设置为10秒。

我想在接收数据包或计时器关闭时退出循环。

这里的问题是,如果数据包到达,代码会从while循环中出来,但如果当前时间超过结束变量,它就不会从while循环中出来。

1 个答案:

答案 0 :(得分:0)

使用Future更简单:

private final ExecutorService executorService = Executors.newSingleThreadExecutor();

Future<Packet> future = executorService.submit(() -> receivePacket());
try {
   Packet packet = future.get(10, TimeUnit.SECONDS);
} catch (TimeoutException e) {
    // HANDLE TIMEOUT HERE
} catch (InterruptedException | ExecutionException e) {
   // HANDLE FAILURE HERE
}