【问题标题】:Can Insert objects created from the same Storage object be executed concurrently?从同一个 Storage 对象创建的 Insert 对象可以同时执行吗?
【发布时间】:2013-04-16 00:51:32
【问题描述】:

我正在使用 Google 的 Java API 来处理 Google Cloud Storage (GCS)。

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

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

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

insertObject.execute();

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

提前致谢!

【问题讨论】:

  • 我希望这可以正常工作,但我会看看是否可以从更了解 java api 客户端的人那里找到更权威的答案。
  • This issue 让我相信它是线程安全的。
  • 感谢 cmets 伙计们,因此假设它是线程安全的似乎很安全。

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


【解决方案1】:

是的! :)

也就是说,假设您使用的 HttpTransport 实例是线程安全的,那么拥有一个共享的 Storage 实例应该是线程安全的。不安全的是在不提供额外锁定的情况下跨线程共享请求类本身或其响应。但只要每个线程都使用自己的请求类,这是安全的,实际上建议跨线程共享 Storage 和实例。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多