IoArgs并发读问题
来源:9-3 文件消息模型基础实现-1
qq_Con男_03307287
2020-08-05
IoArgs args = receiveIoArgs;
IoArgs.IoArgsEventListener listener = SocketChannelAdaptor.this.receiveListener;
listener.onStarted(args);
try {
//具体的读取操作
if( args.read(channel) > 0 ){
listener.onCompleted( args );
}else{
throw new IOException("cannot read any data");
}
}catch (Exception e){}
问题:如果多个HandleInputCallback都被异步调用 了,而他们用的是同一个IoArgs,读数据的时候会不会数据错乱呢,望老师解惑
写回答
1回答
-
IoArgs所属为一个链接,所以我们需要保证一个链接在整个生命周期中仅仅只会有一个HandleInputCallback以及HandleOutputCallback被线程调用,而不能让多个线程同时调用一个链接的HandleInputCallback。
但可以同时并发多个链接的HandleInputCallback,因为不同链接的IoArgs不同,不存在竞争与数据错乱问题。
112020-08-08
相似问题