是否可以同时执行从同一个Storage对象创建的Insert对象?

Fel*_*lix 3 java google-api-java-client google-api-client google-cloud-storage

我正在使用Google的Java API来使用Google云端存储(GCS).

我有多个工作线程将对象插入GCS.目前,它们共享一个公共Storage实例,并使用它来创建Storage.Object.Insert实例:

synchronized(LOCK)
{
    insertObject = mStorage.objects().insert(mBucketName, objectMetadata, mediaContent);
}
Run Code Online (Sandbox Code Playgroud)

后来,他们打电话execute()Insert情况下,将文件上载到GCS.

insertObject.execute();
Run Code Online (Sandbox Code Playgroud)

我的问题是我可以execute()在不同的线程中同时运行调用吗?该Insert对象对于该线程是唯一的,但Storage它创建的对象是在线程之间共享的,所以我担心这可能会导致问题.

提前致谢!

Yan*_*bar 5

是! :)

也就是说,假设您使用的HttpTransport实例是线程安全的,那么拥有共享存储实例应该是线程安全的.不安全的是共享请求类本身或跨线程的响应,而不提供您提供的额外锁定.但只要每个线程使用自己的请求类,它就是安全的,事实上建议跨线程共享存储和实例.

注意:我是google-api-java-client项目的所有者