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