Google应用程序引擎(java)服务类是线程安全的吗?

Google应用程序引擎(java)服务类是线程安全的吗?,java,google-app-engine,Java,Google App Engine,可以从工厂获得一次对服务的引用并将其用于处理多个请求吗?对于servlet,最好使用以下伪代码进行解释: SomeServlet...{ MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService(); UserService userService = UserServiceFactory.getUserService(); DatastoreService datastoreService

可以从工厂获得一次对服务的引用并将其用于处理多个请求吗?对于servlet,最好使用以下伪代码进行解释:

SomeServlet...{
  MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
  UserService userService = UserServiceFactory.getUserService();
  DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();

  doGet(...){
    userService.doSomething(...);
  }
...
}

这可能是一个过早的优化,但我只是想知道为每个请求获得服务的成本是多少。请分享您的见解。

在谷歌团队线程中,Ikai Lan(来自谷歌GAE团队)说MemcacheService是线程安全的,但缓存它没有用,因为每次从工厂获得服务时,只有一个对象分配


由于所有服务都是以类似的方式获得的,我认为我们可以假设它们都遵循相同的设计,并且都是线程安全的。但是,由于在每个查询中获取一个新实例并不昂贵,因此我不会缓存它们。

在google组中,线程John Patterson表示DatastoreService非常轻量级,因此最好从工厂获取一个实例,并在需要时对其进行配置

同样在同一个线程中,Jeff Schnitzer指出,由于DatastoreService没有标记为threadsafe,因此认为它是(或将永远是)线程安全是不明智的

但是,有些方法,如getCurrentTransaction()被记录为线程感知(),因此在某些情况下,DatastoreService可能是线程容忍的