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 回答