我在我的主应用程序中有以下代码:
package acast;
import java.net.SocketException;
import java.util.concurrent.ConcurrentLinkedQueue;
public class ACast {
private ConcurrentLinkedQueue<String> queue;
public ACast() throws SocketException{
queue = new ConcurrentLinkedQueue<String>();
UDPServer srv = new UDPServer(4321);
srv.addUDPacketListener(new UDPPacketListener() {
@Override
public void onPacketReceived(String packet) {
ACast.this.queue.offer(packet);
}
});
srv.start();
}
public static void main(String[] args) throws SocketException {
try{
new ACast();
}
catch(SocketException e){
//e.printStackTrace();
System.out.println("Socket allready opened. Can't start application");
System.exit(1);
}
}
}我的UDPServer扩展了线程,并在每次收到UDP数据报时调用onPacketReceived。我希望我的主应用程序在自上次接收数据报以来每次经过配置的超时时都执行某些操作。我希望避免运行一个只检查从秒到秒的超时的线程。我希望在最后收到数据报的时刻启动倒计时线程,并取消任何其他正在进行的超时线程(如果可用)。有什么帮助吗?
发布于 2015-02-17 03:30:33
一个简单的解决方案是使用超时任务启动一个Timer,并且每次接收到新的数据报时,取消当前运行的计时器并启动一个新的计时器。
https://stackoverflow.com/questions/28547560
复制相似问题