我有一个关于可能的线程交错的问题,但我可能在这里错了。我称之为代码片段 来自
handleUpstream(ChannelHandlerContext ctx,ChannelEvent事件)
private AtomicInteger metrics = new AtomicInteger();
if ( metrics.getAndSet( metrics.get() + 1 ) < 3 ){
mc.writeInt( readableBytes );
System.out.format( "Bytes [%d] ", readableBytes );
mc.writeLong( latency );
System.out.format( "Latency [%d]%n ", latency );
}
看起来有时写入会混乱。当我回读时,他们错了,打印报表也不正常。这些方法正在写入NIO直接缓冲区。
我是否应该在此处使用一些java.util.concurrency功能来强制执行订单?
感谢。