【问题标题】:Order of non-blocking writes in JavaJava中非阻塞写入的顺序
【发布时间】:2014-09-25 19:12:12
【问题描述】:

Java 的 NIO 提供了许多有用的特性。其中之一是在通道上进行非阻塞写操作的可能性。这意味着 write 方法在写入完成之前不会阻塞。

但是即使方法没有阻塞,是否仍然提供所有写入的写入顺序与调用写入的顺序相同?

【问题讨论】:

  • 如果你认为你必须问这个问题,你已经有一个更大的设计问题。首先,您不应该从多个线程写入套接字,如果您使用的是非阻塞 I/O,则首先不需要多个线程。这里有些架构混乱。
  • 我没有使用多线程。我只是按顺序调用了几次write方法

标签: java sockets io nio channels


【解决方案1】:

考虑到 NIO api 不允许程序在前一次写入完成之前在同一线程内写入同一通道,您正在考虑的情况不太可能。一个WritePendingException 被抛出。来自文档:

当尝试写入异步套接字通道并且之前的写入尚未完成时引发未经检查的异常。

Async API 的构建方式,您最多可以尝试从不同的线程写入,或者等到第一次写入完成后再启动另一个

【讨论】:

  • 是否可以让通道的读非阻塞和写阻塞?
  • @MinecraftShamrock - 不是同一个频道,不。有用于非阻塞 I/O 的异步通道和用于阻塞 I/O 的普通 FileChannel
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 2018-01-04
相关资源
最近更新 更多