使用Java NIO实现通用计时器(周期性事件)?

时间:2012-05-01 01:27:07

标签: java nio

是否可以在Java中的NIO选择器上接收周期性通用事件?在boost::asio我之前使用了deadline_timer

例如,我想在选择器运行的同一个线程上每秒调用一次函数,独立于选择器上活动套接字的加载量(除了特殊情况,例如需要超过一秒钟才能处理传入的套接字消息)。

1 个答案:

答案 0 :(得分: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);
}