我正在使用 Google 的 Java API 来处理 Google 云存储 (GCS)。
我有多个工作线程将对象插入到 GCS 中。目前他们共享一个共同的 Storage
实例,并使用它来创建 Storage.Object.Insert
实例:
synchronized(LOCK)
{
insertObject = mStorage.objects().insert(mBucketName, objectMetadata, mediaContent);
}
他们稍后在 Insert
实例上调用 execute()
,将文件上传到 GCS。
insertObject.execute();
我的问题是我可以在不同线程中同时运行 execute()
调用吗? Insert
对象对于该线程是唯一的,但是创建它的 Storage
对象在线程之间共享,所以我担心这可能会导致问题。
提前致谢!
最佳答案
是的! :)
也就是说,假设您使用的 HttpTransport 实例是线程安全的,那么共享存储实例应该是线程安全的。不安全的是在没有提供额外锁定的情况下跨线程共享请求类本身或其响应。但只要每个线程都使用自己的请求类,它是安全的,实际上建议跨线程共享存储和实例。
注意:我是 google-api-java-client 项目的所有者
关于java - 从同一个 Storage 对象创建的 Insert 对象可以并发执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16158644/