ByteBuffer.getInt() 是不是阻塞? [关闭]
Posted
技术标签:
【中文标题】ByteBuffer.getInt() 是不是阻塞? [关闭]【英文标题】:Is ByteBuffer.getInt() blocking? [closed]ByteBuffer.getInt() 是否阻塞? [关闭] 【发布时间】:2013-04-04 15:59:48 【问题描述】:我愿意使用ByteBuffer
来进行 JNI 和 C++ 的线程间通信。我在文档中找不到 ByteBuffer 的 getInt()
是否阻塞。那么,我是否需要做类似的事情:
if(byteBuffer.asIntBuffer().hasRemaining())
byteBuffer.getInt();
Thread.sleep(1000);
或
byteBuffer.getInt();
会阻塞所以不需要睡眠?
【问题讨论】:
它不是流,它不等待任何输入,它只是读取一个固定的内存位置。 有道理,谢谢!ByteBuffer
s 根本没有同步;它们不是线程安全的。
@Louis 他们不是原子的?什么意思?
@quimnuss:不,它们不是原子的。 ByteBuffer
没有任何线程安全性。如果没有记录,则不存在。
【参考方案1】:
根据the documentation,如果缓冲区中没有至少四个字节,它将抛出BufferUnderflowException
。这表明它不会阻塞(就像“阻塞”这个词根本没有出现在其文档页面上一样)。
但请注意,您的sleep
解决方案将不起作用,因为您正在执行sleep
调用在 调用getInt
,如果没有'还没有足够的数据。在调用getInt
之前,您需要确保缓冲区中至少有四个字节。
【讨论】:
是的,实际代码更长。你是对的,摘录可能具有误导性。固定。以上是关于ByteBuffer.getInt() 是不是阻塞? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章