【发布时间】:2016-01-08 20:23:05
【问题描述】:
假设我有一个网络应用程序,对于每个请求,我们都会生成一个新线程。数百个请求进来,在 Web 服务器代码的某个地方,我们对多个服务进行同步调用,我们阻塞并等待。这种方法会使我们拥有的线程数量膨胀,因为同步调用会造成瓶颈。
假设,如果我们将这些调用切换为异步请求,我们将摆脱瓶颈,因为线程可以继续,回调将处理任何需要发生的事情。
据我所知,在 Java 中,为了进行异步调用,我们会生成一个新线程来进行网络调用并包含回调(我不会实现这个,我假设这就是Java http 库工作)。
所以我的问题是,这如何解决多线程的问题?异步请求最终会创建更多线程(每个请求一个),然后进入睡眠状态,直到返回某些内容,这不会创建许多睡眠线程吗?
我要解决的问题是,在某些时候,当线程过多时,JVM 会爆炸。
【问题讨论】:
-
这是发生了还是你在谈论一些理论上的事情?
-
每次收到请求时都不需要生成一个新线程。通常,这是由线程池解决方案处理的。
标签: java multithreading asynchronous