1
在Play文档有这个例子:Play Framework:如何创建和使用连接池?
public class AsyncTest extends Controller {
public static void remoteData() {
F.Promise<WS.HttpResponse> r1 = WS.url("http://example.org/1").getAsync();
F.Promise<WS.HttpResponse> r2 = WS.url("http://example.org/2").getAsync();
F.Promise<WS.HttpResponse> r3 = WS.url("http://example.org/3").getAsync();
F.Promise<List<WS.HttpResponse>> promises = F.Promise.waitAll(r1, r2, r3);
// Suspend processing here, until all three remote calls are complete.
List<WS.HttpResponse> httpResponses = await(promises);
render(httpResponses);
}
}
在上面的例子是在3个新HTTP
连接example.org
,正确?
有什么办法可以在启动时创建一个连接池,然后从该池中获取并重新使用连接,而不是反复创建和拆除连接?理想情况下,我可以有多个连接池,例如,一个HTTP连接池,一个数据库连接池等。我该怎么做?
谢谢。
感谢:
不过,如果你想手动建立一套应用程序启动(?也许TCP连接工作节点)的资源,你可以如下图所示初始化在应用程序启动任何东西。因此,如果我将连接存储在一个静态变量中,如何确保它是多线程访问该变量以获取连接并返回连接的线程安全? – Continuation 2012-01-17 09:42:10
使用synchronize(object){}可以显式同步任何对象(无论它是否来自静态变量)请参见[here](http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync .html)提醒。 – 2012-01-17 09:55:06
由于性能方面的原因,HTTP连接池通常很有用(例如HttpClient默认使用它:http://hc.apache.org/httpcomponents-client-4.2.x/tutorial/html/connmgmt.html#d5e463) – 2014-10-13 07:56:05