簡體   English   中英

具有類本身的線程同步塊

[英]Thread synchronized block with Class itself

我認為以下用法是創建一個同步塊,因為ThreadMyClass.class是唯一的。 但是,當我使用多個線程嘗試訪問get()方法創建了繁忙的流量時,我發現創建了許多不一致的狀態。 那么,為什么線程不與ThreadMyClass.class實例同步?

public ThreadMyClass {


 public Object  get(){

  synchronized (ThreadMyClass.class) {
    //get object return 
  }

 }
}


public static final  Object lock = new Object();

當我用lock對象更改ThreadMyClass.class時,一切工作正常。

更新:這是我的完整代碼部分實例創建塊被多次調用。

   public static XmppInterface getInstance() throws XMPPException {
      if (instance == null) {
         synchronized (XmppInterface.class) {
            if (instance == null) {
              //create an instance
            }
         }
      }
      return instance;
   }

好吧,您正在同步class ,而不是其實例,這等同於具有static synchronized方法。

要同步類的實例,可以使用synchronized實例方法。

否則,在用於鎖的Object進行同步將僅在該Object上進行同步,其余靜態方法和實例方法將從同步策略中“釋放”。

暫無
暫無

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

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