在Java 21中使用虚拟线程时应该使用java.io还是java.nio

问题描述 投票:0回答:1

我正在彻底学习 Spring Boot,并且正在学习如何上传文件,在我的示例中,我将把路径存储在数据库中,并将内容存储在文档根目录之外的文件系统中。

我希望这更多是一个一般性问题,但如果有关于 Spring Boot 的某些细节使其相关,我想知道。

据我所知,虚拟线程是我们可以轻松编写正常的阻塞代码,并且 JVM 在遇到阻塞代码时会挂起虚拟线程。

考虑到这一点,如果我使用虚拟线程并且想要使用文件系统,我应该使用常规阻塞 java.io 文件类还是仍然使用 java.nio ?

NIO 包是否提供了更多检查和设置文件权限的功能?

无论如何,我正在学习旧的 java.io,但如果需要的话我可以随时转向 NIO

java nio file-handling java-io virtual-threads
1个回答
-1
投票

java.io
使用阻塞 I/O 模型,其中执行 I/O 操作(如从文件或网络读取)的线程将阻塞并等待操作完成。

虚拟线程可以在传统意义上阻塞(例如等待 I/O),但这样做时它们不会占用系统资源。这允许您使用阻塞式代码(如

java.io
),而没有阻塞的缺点。

因此,使用虚拟线程可以缓解

java.io
操作中的资源阻塞。

java.nio
提供非阻塞 I/O 操作,允许单个线程无阻塞地管理多个通道(如套接字)。

如果你的目标是高并发和高性能我认为你应该使用

java.nio

如果高并发对您的服务器并不重要,您可以使用

java.io
,它比
java.nio
更容易实现和处理,并与虚拟线程一起使用以避免阻塞资源。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.