Java IO是阻塞IO吗?

GMs*_*soF 2 java sockets io networking websocket

我知道对于一个线程(一个套接字),我不能同时执行read()或write(),或者我可以吗?

但是如果我创建2个线程并且每个线程分别处理read()和write()怎么办?我不知道在低级别视图中,read()和write()是否会获得套接字锁定,因此一次只允许执行一个操作?会吗?

我使用Window作为平台,还想知道Unix机器有什么不同吗?

我问这个问题,因为我很困惑,为什么我们需要非阻塞IO,因为2个线程能够同时让我们read()和write()?

use*_*421 5

我知道对于一个线程(一个套接字),我不能同时执行read()或write(),或者我可以吗?

当然不是.一个线程一次只能调用一个方法.这个问题毫无意义.

但是如果我创建2个线程并且每个线程分别处理read()和write()怎么办?我不知道在低级别视图中,read()和write()是否会获得套接字锁定,因此一次只允许执行一个操作?会吗?

他们不需要锁.TCP是全双工的.您可以在同一个套接字上读写.同时.

我使用Window作为平台,还想知道Unix机器有什么不同吗?

没有.

我问这个问题,因为我很困惑,为什么我们需要非阻塞IO,因为2个线程能够同时让我们read()和write()?

下定决心.首先你问是否有可能,现在你(正确地)说出来了.

NIO允许您在同一个线程中处理多个套接字.这样做的目的是保护线程,例如在必须处理数十万个连接的服务器中.