無論AWSCredentialsProviderChain.java也不DefaultAWSCredentialsProviderChain狀態,他們是線程安全的文檔。 它們在鏈接實現中是否是線程安全的(從版本1.11.124開始)?是DefaultAWSCredentialsProviderChain(v1.11.124)是線程安全的
如果是這樣,那麼我認爲我們可以假設,在鏈底層提供商以及(即ProfileCredentialsProvider是否是線程安全的)?
無論AWSCredentialsProviderChain.java也不DefaultAWSCredentialsProviderChain狀態,他們是線程安全的文檔。 它們在鏈接實現中是否是線程安全的(從版本1.11.124開始)?是DefaultAWSCredentialsProviderChain(v1.11.124)是線程安全的
如果是這樣,那麼我認爲我們可以假設,在鏈底層提供商以及(即ProfileCredentialsProvider是否是線程安全的)?
的AWS SDK中提供的所有憑據提供是線程安全的,包括默認證書鏈及其所代表的人。
在憑證提供程序(例如,憑證提供程序鏈setReuseLastProvider
)上使用變異方法並不總是作用於易變變量,所以鼓勵在從多個線程使用憑證提供程序之前全面配置憑證提供程序。
如果要創建一個很少的情況下,最好創建單獨的實例。如果您確實創建了足夠多的實例來處理開銷,那麼對getCredentials()
的調用可以說是線程安全的,但是要使用哪個提供程序的緩存可能「效率較低」。看看https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWSCredentialsProviderChain.java#L121
對,對。謝謝@millems。你能否澄清你的意思是「完全配置」? 凱文·穆林向我指出,如果'getCredentials(顯示)'在此行之前再次呼籲:https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src /main/java/com/amazonaws/auth/AWSCredentialsProviderChain.java#L121,那麼代碼可能會重新遍歷整個鏈。 – yegeniy
在開始使用它之前,最好調用提供者上的任何'set *'方法。 'lastUsedProvider'是相當不可預測的,因爲該字段不是易失性的,所以一個線程可以在本地線程緩存它的值,並且沒有鎖定它。 'lastUsedProvider'是一個盡力而爲的領域,所以整個鏈可以迭代多次。防止這種情況效率相對較低,並且多次遍歷鏈的成本不會過高。 – millems