我使用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
对象是在线程之间共享的,所以我担心这可能会导致问题。
提前致谢!
答案 0 :(得分:5)
是的! :)
也就是说,假设您使用的HttpTransport实例是线程安全的,那么拥有共享存储实例应该是线程安全的。不安全的是共享请求类本身或跨线程的响应,而不提供您提供的额外锁定。但只要每个线程都使用自己的请求类,它就是安全的,事实上建议跨线程共享存储和实例。
注意:我是google-api-java-client项目的所有者