【问题标题】: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();

会阻塞所以不需要睡眠?

【问题讨论】:

  • 它不是流,它不等待任何输入,它只是读取一个固定的内存位置。
  • 有道理,谢谢!
  • ByteBuffers 根本没有同步;它们不是线程安全的。
  • @Louis 他们不是原子的?什么意思?
  • @quimnuss:不,它们不是原子的。 ByteBuffer 没有任何线程安全性。如果没有记录,则不存在。

标签: java c++ java-native-interface blocking bytebuffer


【解决方案1】:

根据the documentation,如果缓冲区中没有至少四个字节,它将抛出BufferUnderflowException。这表明它不会阻塞(就像“阻塞”这个词根本没有出现在其文档页面上一样)。

但请注意,您的sleep 解决方案将不起作用,因为您正在执行sleep 调用 调用getInt,如果没有'还没有足够的数据。在调用getInt 之前,您需要确保缓冲区中至少有四个字节

【讨论】:

  • 是的,实际代码更长。你是对的,摘录可能具有误导性。固定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 2020-09-16
  • 2011-04-09
  • 2017-01-25
相关资源
最近更新 更多