【发布时间】:2017-03-12 14:07:20
【问题描述】:
让ByteBuffer 和ByteArrayInputStream 共享底层byte [] 是否“安全”,只要他们只从中读取?如果我从一个然后另一个读取/获取,因为每个都有自己的内部标记/计数器等,是否有可能发生冲突?
【问题讨论】:
让ByteBuffer 和ByteArrayInputStream 共享底层byte [] 是否“安全”,只要他们只从中读取?如果我从一个然后另一个读取/获取,因为每个都有自己的内部标记/计数器等,是否有可能发生冲突?
【问题讨论】:
从ByteBuffer.wrap 和ByteArrayInputStream's constructor 的来源来看,看起来这两个类都会存储您传递给它们的数组而无需复制。似乎这两个类都不会修改数组,因此可以安全地在 ByteBuffer 和 ByteArrayInputStream 的多个实例之间共享相同的 byte[] 数组。
【讨论】:
这是安全的,有一个警告。必须有一个 happens before 链,以确保使用共享 byte[] 的线程可以看到在 byte[] 变为“有效不可变”之前的最后一次写入。
简单来说,设置共享时线程需要同步,
【讨论】:
byte []