1
该任务旨在实现非常简化的计算“云”。云实例(“引擎”)应该定期向主管发送保持活动消息(“命令”)。我实现了这个使用以下任务:使用ScheduledExecutorService时执行最终清理计划任务的位置
public class KeepAlive implements Runnable {
Engine engine;
DatagramSocket sock;
public KeepAlive(Engine engine) {
this.engine = engine;
sock = new DatagramSocket();
}
public void run() {
DatagramSocket sock = null;
EngineArguments args = engine.getArgs();
KeepAliveCommand cmd = new KeepAliveCommand(…);
byte[] data = cmd.toString().getBytes("UTF-8");
DatagramPacket p = new DatagramPacket(data, data.length, InetAddress.getByName(args.getSchedulerHost()), args.getSchedulerPort());
sock.send(p);
}
}
是计划使用scheduleAtFixedRate()执行。我正在使用shutdownNow()进行优雅(ish)关机,以避免必须明确引用长时间运行的任务。
是否有任何“干净”的方式来执行清理任务(关闭DatagramSocket
)?或者,在计划的运行之间保持DatagramSocket实例还是有意义的,或者我可以每次创建一个新的实例?
我会接受这个,因为我基本上去了#1,一起做几乎所有的东西管理资源'Closeable'。 – millimoose