必须保证socketTimeouts()方法和select()方法是同一个线程调用,否则会发生异常
public static void cancelledKey(SelectionKey key) {
try {
// if ( key.interestOps() == 0 ) {
if ( (key.interestOps() & SelectionKey.OP_READ) !=0 ) {
key.cancel();
key.attach(null);
key.channel().close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected static void socketTimeouts() {
try{
Iterator<SelectionKey> iter = selector.keys().iterator();
while(iter.hasNext()){
SelectionKey key = iter.next();
System.out.println("clear:"+key);
cancelledKey(key);
}
}catch(Exception e2){
e2.printStackTrace();
}
}