【问题标题】:Does Java's SocketChannel$read() synchronize the output buffer?Java 的 SocketChannel$read() 是否同步输出缓冲区?
【发布时间】:2012-11-24 22:47:32
【问题描述】:

Java 的 SocketChannel.read() 方法是否同步输出缓冲区?

换句话说:传递给 java.nio.channels.SocketChannel(基本上是任何通道)中的read(ByteBuffer) 方法的 ByteBuffer 参数是否存在锁定。我需要知道这一点,这样我就没有不必要的同步块。

【问题讨论】:

  • 你为什么不看看source code
  • 等等,真的吗? Oracle 从什么时候开始发布他们的源代码的?
  • 既然Java已经开源了?!

标签: java networking nio synchronized channels


【解决方案1】:

SocketChannel 的 Java-Doc 说:

  • 套接字通道可以安全地供多个并发线程使用。他们
  • 支持并发读写,但最多支持一个线程
  • 在任何给定时间,读取和最多一个线程可能正在写入。 {@link
  • #connect connect} 和 {@link #finishConnect finishConnect} 方法是
  • 相互同步,并尝试启动读取
  • 或在调用这些方法之一时写入操作
  • 在调用完成之前,进度将被阻塞。

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2012-06-13
    • 2023-03-04
    • 2015-05-19
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多