

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将单例服务客户端实例与 AWS SDK for Java 2.x
<a name="singleton-service-clients"></a>

中的服务客户端 AWS SDK for Java 2.x 是线程安全的。您可以为每个服务客户端创建一个实例，并在整个应用程序中重复使用该实例。这种方法可以提高性能并更有效地管理资源。

## 单例服务客户端的好处
<a name="singleton-performance-benefits"></a>

连接池  
服务客户端维护内部 HTTP 连接池。创建和销毁这些池的成本很高。当您重复使用客户端时，可以在不同请求之间高效共享这些池。

降低了初始化开销  
创建客户端涉及加载配置、建立凭证和初始化内部组件。使用单例实例可消除这种开销。

更高效地利用资源  
使用单例客户端可防止因为创建许多客户端实例而耗尽资源。

## 创建和使用单例服务客户端
<a name="singleton-best-practice-example"></a>

以下示例说明了如何创建和使用单例服务客户端：

```
// Create one instance and use it throughout the application.
public class ServiceClientSource {
    private static final S3Client s3Client = S3Client.create();
    
    public static S3Client getS3Client() {
        return s3Client;
    }
}
```

不要为每个操作创建新客户端：

```
// This approach creates unnecessary overhead.
public void badExample() {
    try (S3Client s3 = S3Client.create()) {
        s3.listBuckets();
    }
}
```

## 重要注意事项
<a name="singleton-important-considerations"></a>
+ 服务客户端是线程安全的。您可以安全地在多个线程中共享客户端。
+ 仅在应用程序关闭或不再需要客户端时才关闭客户端。 try-with-resources在应用程序级别使用`client.close()`或。
+ 如果您需要不同的配置（例如区域或凭证），请为每个配置创建单独的单例实例。

如果您使用像 Spring 这样的依赖项注入框架，请将服务客户端配置为单例 bean。这样可以确保适当的生命周期管理。