2014-03-12 125 views
0

我有一個如下所述的條件,其中我需要多個客戶端來訪問我的服務器。我有我的代碼,如下所示。在Java線程中執行同步

main(){ 
new thread(new class()).start(); 
} 

void run(){ 
xyz(); 
} 

xyz(){ 
    switch(){ 
     case 1: 
     read() 
     break; 
     case 2: 
     write() 
    } 
} 

我想確保當一個線程執行write()時。 read()不應該被阻塞。我有很多這樣的功能相互關聯。我怎樣才能確保這些功能是同步的?我應該刪除開關的情況下,並使用同步塊?或者還有其他方法嗎?

+2

使用讀/寫鎖? (Java有'ReentrantReadWriteLock') – fge

回答

1

取出開關?但「開關」與同步無關。聽起來像,也許你真正的問題是關於什麼對象鎖定,多少,什麼時候。

你說過,「我想確保當一個線程正在執行write()時,read()不應該被阻塞。」

你的代碼似乎已經這樣做了。您沒有向我們展示任何可以防止read()調用與write()調用同時發生的任何事情。你試圖阻止什麼?如果你只是想阻止併發寫()調用,但你不關心什麼用read()調用發生在同一時候,那麼這可能是這樣的:

private Object writerLock = new Object(); 

xyz(...) { 
    //same as in your example 
} 

private ... read(...) { 
    ... 
} 

private ... write(...) { 
    synchronized(writerLock) { 
     ... 
    } 
}