[英]How I can implement AWS S3 client in a thread safe manner?
您好我有一个由多个线程同时执行以连接到 s3 存储桶对象并读取元数据的方法。 所有这些方法都使用单个 s3 客户端 object。 根据 Amazon Java SDK 文档,我发现 s3Clients 是线程安全对象。 以下实现方式会导致任何死锁或性能问题吗? 在 s3 客户端使用多线程时,这是正确的实现方式吗?
public class S3Client {
// static method that returns the s3 client for all the requests
public static AmazonS3 getS3Client(){
return AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
}
}
还有另一个类(RequestHandler->readObject 方法)将由多个线程同时执行。 因此将为每个请求执行。
public class RequestHandler {
// Multiple concurrent threads are accessing this method
public void readObject(){
AmazonS3 s3Client = S3Client.getS3Client();
ListObjectsV2Result result = s3Client.listObjectsV2("bucket_name");
}
}
请指教。 提前致谢!!
让go一一:
S3Client#getS3Client()
。AmazonS3Client
singleton object。 在上面的示例中,您清楚地为每个RequestHandler#readObject()
方法调用创建了新实例。 这不仅不安全,而且可能会导致性能问题,因为您将创建大量AmazonS3Client
,这将降低您的 java 应用程序垃圾收集过程。 You can solve pretty much all of it if you will just use a singleton pattern, ie create AmazonS3Client
as a singleton object, either by spring, or by any other IoC framework, or by yourself, for example via double check locking . 通过这种方式,您将实现线程安全以及相对良好的性能(与问题中的代码相比)。
希望对您有所帮助,祝您有美好的一天!)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.