用JavaNIO实现通用定时器(周期事件)?

用JavaNIO实现通用定时器(周期事件)?,java,nio,Java,Nio,是否可以在Java中的NIO选择器上接收周期性泛型事件?在boost::asio上,我以前使用过一个 例如,我希望在选择器正在运行的同一线程上每秒调用一次函数,独立于选择器上活动套接字的加载量(特殊情况除外,如处理传入套接字消息需要一秒钟以上的时间)。类似的操作可能会起作用: private final BlockingQueue<YourFunction> queue = ... public void run() { while(!queue.isEmpty()) {

是否可以在Java中的NIO选择器上接收周期性泛型事件?在
boost::asio
上,我以前使用过一个


例如,我希望在选择器正在运行的同一线程上每秒调用一次函数,独立于选择器上活动套接字的加载量(特殊情况除外,如处理传入套接字消息需要一秒钟以上的时间)。

类似的操作可能会起作用:

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);
}
private final BlockingQueue=。。。
公开募捐{
而(!queue.isEmpty()){
queue.poll().performAction();
}
selector.select();
迭代器itr=选择器。selectedKeys()。迭代器();
while(itr.hasNext()){
//等等。。。
}
}
公共静态void main(字符串[]args){
定时器t=新定时器(名称、守护进程);
t、 scheduleAtFixedRate(新TimerTask(){
公开募捐{
add(newyourfunction());
selector.wakeup();
}
}, 0, 1000);
}

是的,有可能:根据事件前的剩余时间,向select提供超时。选择将解除数据阻塞(处理它)或超时(处理它)。冲洗并重复。或者,最好使用一个支持这种功能的overnio库,比如XNIO。