我曾经使用过代码
public static AmazonS3Client s3 = null;
...
BasicAWSCredentials c = new BasicAWSCredentials("absadgwslkjlsdjgflwa");
s3 = new AmazonS3Client(c);
Run Code Online (Sandbox Code Playgroud)
只有一个实例s3被创建,而数十个线程将通过s3.putObject()上传图像.在转储信息中,我可以看到一个线程将锁定唯一的实例s3而其他人正在等待.
所以我想如果我使用下面的代码可能会更快:
BasicAWSCredentials c = new BasicAWSCredentials("absadgwslkjlsdjgflwa");
for(int i = 0; i < 10; i++)
amazonS3[i] = new AmazonS3Client(c);
Run Code Online (Sandbox Code Playgroud)
每次系统将获得随机的s3实例,然后上传图像.
private static AmazonS3 getS3(){
int i = (int)(Math.random() * 10);
return amazonS3[i];
}
Run Code Online (Sandbox Code Playgroud)
但似乎系统变慢了.为什么会这样?也许唯一的实例s3已经使用了连接池?我很迷惑.
官方文档仅描述了如何在scala中使用它.http://www.playframework.com/documentation/2.1.0/ThreadPools.
Future {
// Some blocking or expensive code here
}(Contexts.myExecutionContext)
Run Code Online (Sandbox Code Playgroud)
我可以得到excutionContext,如:
ExecutionContext myExecutionContext = Akka.system().dispatchers().lookup("my-context");
Run Code Online (Sandbox Code Playgroud)
但是如何在代码中加入呢?
return async(
future(new Callable<String>() {
public String call() {
return doSth();
}).map(new F.Function<String,Result>() {
public Result apply(String i) {
return ok(i);
}
})
Run Code Online (Sandbox Code Playgroud)