Java Hibernate使用大量线程

Java Hibernate使用大量线程,java,multithreading,hibernate,postgresql,Java,Multithreading,Hibernate,Postgresql,在我的独立应用程序中,一次生成1000多个线程,每个线程都有自己的Hibernate会话。但在本例中,会话命中数超过了抛出错误的数据库最大连接数限制 我尝试设置.getCurrentSession()而不是.openSession(),但没有效果,因为Hibernate仍然会为每个新线程打开新的自己的会话 我怎样才能解决这个问题?我可以设置并发连接的插槽数吗?例如,通过100个连接,让另外900个连接等待这100个连接关闭,以便进一步处理此问题?使用连接池可以帮助解决此问题 下面是一篇关于设置连

在我的独立应用程序中,一次生成1000多个线程,每个线程都有自己的Hibernate会话。但在本例中,会话命中数超过了抛出错误的数据库最大连接数限制

我尝试设置
.getCurrentSession()
而不是
.openSession()
,但没有效果,因为Hibernate仍然会为每个新线程打开新的自己的会话


我怎样才能解决这个问题?我可以设置并发连接的插槽数吗?例如,通过100个连接,让另外900个连接等待这100个连接关闭,以便进一步处理此问题?

使用连接池可以帮助解决此问题

下面是一篇关于设置连接池的帖子

大多数人使用连接池,比如C3P0,可以用来 确保会话重用并加快代码的速度

我使用的最佳结构是创建一个SessionFactory 应用程序启动,因为这将设置到 数据库然后,利用可能的单例模式来保持单例 SessionFactory,为您执行的每个事务请求新会话 来自单会话工厂。Hibernate将利用底层 连接池,用于处理会话重用以提高速度和优化

下面是关于各种可用连接池库的另一篇文章

默认情况下,Hibernate附带获取数据源的功能 通过设置 适当的属性


您可以使用“ExecutorService”管理1000个线程,限制为仅运行100个线程,其他线程将保留在队列中

然而,我认为在你的应用程序中有这么多线程是不好的。我假设您正在开发一个web服务应用程序,并且可能同时有1000个请求,传统的解决方案是创建1000个线程来处理这个问题。但是ePobe会更好,你可以考虑一些NIO框架,比如MIA/NETY。