代码之家  ›  专栏  ›  技术社区  ›  IUnknown

多线程环境中的Bytebuffer[duplicate]

  •  0
  • IUnknown  · 技术社区  · 7 年前
    class RequestMessage{
    
    public byte[] getMsgAsBytes() throws UnsupportedEncodingException{
            ByteBuffer reqBuffer = ByteBuffer.allocate(PAYLOAD_SZ);
            reqBuffer.put(xxx);
            reqBuffer.putInt(xxx);
            reqBuffer.put(xxx);
            reqBuffer.position(0);
            return reqBuffer.array();
        }
    }
    

    (read-only) 。单例将被多个线程串联访问。

    private void sendRequest(...) throws Exception {
            RequestMessage reqMessage = new RequestMessage( );
            gateway.sendAsyncMessage(...., reqMessage.getMsgAsBytes());
    
    }
    

    使用bytebuffer线程安全吗?
    我们确实看到数组内容偶尔出现损坏,需要确定原因。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Maurice Perry    7 年前

    如果 xxx RequestMessage ,它是线程安全的:因为 请求消息 ByteBuffer 是局部变量,不能被其他线程更改。

        2
  •  0
  •   Erwin Smout    7 年前

    观察到的腐败包括什么?

    如果这些xxx是RequestMessage的实例字段 它们是不变的 (意味着没有设置器,它们的值在构造函数调用时被设置和固定) 构成xxx的任何对象的状态本身也是不变的 那么事情就应该是廉洁的。