当前位置: 代码迷 >> J2EE >> Mina传送数据有关问题
  详细解决方案

Mina传送数据有关问题

热度:56   发布时间:2016-04-17 23:45:54.0
Mina传送数据问题
public class ServerMessageDecoder extends CumulativeProtocolDecoder {

private final Charset charset = Charset.forName("UTF-8");
    private IoBuffer buff = IoBuffer.allocate(320).setAutoExpand(true);
    //private static int count = 0;
@Override
public boolean doDecode(IoSession iosession, IoBuffer iobuffer, ProtocolDecoderOutput out) throws Exception {
...;
}


想问下,这个doDecode方法是不是线程安全的? 从我打印的log来看好像不是线程安全的... 也就是说会有多个线程调用doDeocde.
但是我在网上看的代码都是对ioBuffer数据直接处理,没有区别ioseesion.我想问下,你们是怎么处理的?
------解决方案--------------------
-------从我打印的log来看好像不是线程安全的... 也就是说会有多个线程调用doDeocde.

这句话说错了,有多个线程调用并不代表就是非线程安全。是否线程安全是根据多个线程和单个线程调用的结果是否一致确定的。
ioseesion不是没用,是隐式用的,如果读不完,就把剩下的存放到iosession里。
------解决方案--------------------
从语义上看ServerMessageDecoder?这种底层的类属于功能类,本身就不应该有状态,简单的说,不应该有自己的成员变量之类的东西,所以在多线程的环境下是没有问题的。如果你把状态之类的东西放在这个类里,就理所应当没办法保证安全了