【发布时间】:2018-07-29 16:50:08
【问题描述】:
我一直在思考为什么 JDBC 只是阻塞操作以及为什么我不能为假设的事件处理程序 onResultSetArrived(ResultSet rs) 设置一些侦听器。为什么我必须为每个 JDBC 查询阻塞一个线程。
一段时间后,我深入研究了 Java 套接字(我想 JDBC 是建立在它们之上的),并意识到也没有任何事件处理。提供非阻塞读取的唯一选项是通过 available() 方法,但这非常低效,因为它必须在循环中定期检查。
据我所知,中断是 PC 中的基本功能。它从硬件到操作系统。在Java中,它可以实现为从Socket读取值的事件驱动方法。
现在,我的问题是我是否遗漏了什么并且存在一些解决方法或 Java 中的当前架构真的是 每个阻塞操作一个线程? 如果是,则不是'效率低吗?
【问题讨论】:
-
“Java 中的当前架构确实是每个阻塞操作一个线程” - 对于阻塞 I/O,是的。然而,Project Loom 正在将 Fibers 和 Continuations 引入 Java,这将使其大大更有效率:)
标签: java