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

时间:2013-04-22 23:52:57

标签: java google-api-java-client google-cloud-storage google-api-client

我使用Google的Java API与Google云端存储(GCS)配合使用。

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

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

他们稍后在execute()实例上调用Insert,将文件上传到GCS。

insertObject.execute();

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

提前致谢!

1 个答案:

答案 0 :(得分:5)

是的! :)

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

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