2017-05-12 2 views
0

AWSCredentialsProviderChain.javaでもDefaultAWSCredentialsProviderChainも、ドキュメントではスレッドセーフです。 リンクされた実装(バージョン1.11.124以降)ではスレッドセーフですか?DefaultAWSCredentialsProviderChain(v1.11.124)はスレッドセーフです

もしそうなら、チェーンの基礎となるプロバイダーも同様であると考えることができます(つまり、ProfileCredentialsProviderがスレッドセーフであるかどうか)。

答えて

1

AWS SDK内で提供されるすべての資格プロバイダは、デフォルトの資格情報チェーンとその委任先を含むスレッドセーフです。

資格プロバイダ(たとえば、資格プロバイダチェーンのsetReuseLastProvider)の突然変異メソッドを使用すると、常に揮発性変数に作用するとは限らないため、複数のスレッドから資格プロバイダを使用する前に完全に構​​成することをお勧めします。

+0

右、右。ありがとう@millems。あなたは "完全に構成する"ことが何を意味するかを明確にすることができますか? Kevin Mullinは、この行の前に 'getCredentials()'がもう一度呼び出されると、https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src /main/java/com/amazonaws/auth/AWSCredentialsProviderChain.java#L121の場合、コードは再びチェーン全体を反復することがあります。 – yegeniy

+1

プロバイダを使用する前に、そのプロバイダの 'set *'メソッドを呼び出すことをお勧めします。 'lastUsedProvider'は、フィールドが揮発性でないため、スレッドがローカルにスレッドの値をキャッシュし、その周りにロックがないため、かなり予測できません。 'lastUsedProvider'はベストエフォート型フィールドなので、チェーン全体が何度も繰り返し処理される可能性があります。これを防止することは比較的非効率的であり、チェーンを複数回通過するコストは過大ではない。 – millems

0

少数のインスタンスを作成する場合は、別々のインスタンスを作成することをお勧めします。オーバーヘッドのために十分な数のインスタンスを作成しているのであれば、getCredentials()の呼び出しはおそらくスレッドセーフですが、使用するプロバイダのキャッシングは「効率が悪い」場合があります。見てくださいhttps://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWSCredentialsProviderChain.java#L121

関連する問題