簡體   English   中英

Google App Engine(java)服務類是否為線程安全?

[英]Are Google App Engine (java) service classes Thread-Safe?

是否可以從工廠獲得對服務的引用並將其用於處理多個請求? 最好使用以下偽代碼來解釋servlet:

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

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

這可能是一個不成熟的優化,但我只是想知道為每個請求獲得服務的成本是多少。 請分享您的見解。

在Google群組主題http://groups.google.com/group/google-appengine-java/browse_thread/thread/d3f1536084f59c22中 ,Ikai Lan(來自Google的GAE團隊)稱MemcacheService是線程安全的,但是緩存它沒有用,因為每次從工廠獲得服務時只有一個對象分配。

由於所有服務都以類似的方式獲得,我認為我們可以假設它們都遵循相同的設計並且都是線程安全的。 但是因為在每個查詢中獲取新實例並不昂貴,所以我不會緩存它們。

在google群組線程https://groups.google.com/forum/#!topic/google-appengine-java/4Zt5IEKy_5s John Patterson表示DatastoreService非常輕量級,因此最好從工廠獲取並配置它在你需要的時候。

同樣在同一個帖子中,Jeff Schnitzer指出,由於DatastoreService沒有被標記為線程安全,因此將其分配(或將始終是)是不明智的。

但是,某些方法(如getCurrentTransaction())被記錄為線程感知( https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/BaseDatastoreService ),因此可能在某些情況下,DatastoreService將是線程容忍的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM