2016-07-24 58 views
0

USECASE變量:旋轉憑證的數據存儲區同步的,只有當它被更新

我想要什麼:

  1. 當updateCredentials被調用時,它會等待,直到所有線程完成獲取證書(通過同步)將憑證更新爲新憑證。
  2. 我不想要調用doSomeQuery使對方等待獲取憑證。這個對象可以在多個線程中使用,而且浪費了等待時間。

有沒有一種方法/模式來實現這一目標?下面的代碼示例實現了第1項而不是項目2

private Object credentialUpdate = new Object(); 

public void updateCredentials(String user, String pass) { 
    synchronize(credentialUpdate) { 
     this.user = user; 
     this.pass = pass; 
    } 
} 

public void doSomeQuery(String query) { 
    String curUser; 
    String curPass; 
    synchronize(credentialUpdate) { 
     curUser = this.user; 
     curPass; 
    } 
    // execute query 
} 
+0

我不明白你的第二點,既不是你的doSomeQueryMethod()。你能更準確地解釋你的目標是什麼(你想要的是什麼,而不僅僅是你不想要的)。 – davidxxx

回答

0

使用java.util.concurrent.locks.ReadWriteLock及其實施ReentrantReadWriteLock。從Javadoc

一個ReadWriteLock維護一對相關的鎖,一個用於只讀操作和一個用於寫入。只要沒有寫入器,讀取鎖可以由多個讀取器線程同時保存。寫鎖定是獨佔的。