Java の NIO セレクターで定期的なジェネリック イベントを受け取ることは可能ですか? 以前にdeadline_timerboost::asio
を使用したことがあります。
たとえば、セレクターが実行されている同じスレッドで、セレクターのアクティブなソケットの負荷の量に関係なく、1 秒に 1 回関数を呼び出したい (着信ソケットの処理に 1 秒以上かかるなどの特別な場合を除く)。メッセージ)。
このようなものがうまくいくかもしれません:
private final BlockingQueue<YourFunction> queue = ...
public void run() {
while(!queue.isEmpty()) {
queue.poll().performAction();
}
selector.select();
Iterator<SelectionKey> itr = selector.selectedKeys().iterator();
while(itr.hasNext()) {
// etc...
}
}
public static void main(String[] args) {
Timer t = new Timer(name, daemon);
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
queue.add(new YourFunction());
selector.wakeup();
}
}, 0, 1000);
}