[英]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.