4

Google の Java API を使用して Google Cloud Storage (GCS) を操作しています。

オブジェクトを GCS に挿入する複数のワーカー スレッドがあります。現在、それらは共通のStorageインスタンスを共有しており、これを使用してインスタンスを作成していStorage.Object.Insertます。

synchronized(LOCK)
{
    insertObject = mStorage.objects().insert(mBucketName, objectMetadata, mediaContent);
}

その後、インスタンスを呼び出しexecute()Insert、ファイルを GCS にアップロードします。

insertObject.execute();

私の質問はexecute()、異なるスレッドで同時に呼び出しを実行できますか? Insertオブジェクトはそのスレッド固有のものですが、それを作成したオブジェクトStorageはスレッド間で共有されているため、問題が発生する可能性があるのではないかと心配しています。

前もって感謝します!

4

1 に答える 1

6

はい!:)

つまり、使用している HttpTransport インスタンスがスレッドセーフであると仮定すると、共有 Storage インスタンスを持つことはスレッドセーフになるはずです。安全ではないのは、追加のロックを提供せずに、リクエスト クラス自体またはそのレスポンスをスレッド間で共有することです。ただし、各スレッドが独自のリクエスト クラスを使用している限り、安全であり、実際にはストレージとインスタンスをスレッド間で共有することをお勧めします。

注: 私は google-api-java-client プロジェクトの所有者です

于 2013-05-20T14:41:15.237 に答える