您好我有多種方法,我需要synchronized塊在所有的方法是這樣一類:同步塊問題?
public class Test2 {
private Object mutex=new Object();
private OtherClass obj=new OtherClass();
public void method1(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}
public void method2(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}
public void method3(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}
public void method4(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}
}
我使用互斥塊同步,所以會發生什麼,如果正在使用method1
時,其他method2
同步塊等待,直到流出同步塊method1
。
我不希望發生這種情況,所以我該怎麼辦?我知道,因爲我正在爲所有方法使用互斥鎖,所以它鎖定了method2
同步塊。我想知道我該怎麼做才能刪除它?我應該爲每種方法創建成員變量嗎?還是有其他解決方法?
我希望其他線程只有在調用相同的方法時纔會等待。就像兩個線程對mehod1進行分類,因此第二個線程應該等待。但如果第二個線程調用method2,它不應該等待。
如果這不是你想要的行爲,你想什麼'method2'去做?跳過塊?然後同步不是你正在尋找... – brimborium
我想其他線程只有等待,如果調用相同的方法..喜歡如果兩個線程類mehod1所以第二個線程應該等待。但如果第二個線程調用method2,它不應該等待。 – Harinder
向下投票 - 非常本地化的問題,即使作者在問題中提出這個問題,答案也非常明顯。 – Romain