以下是一個示例程序。同步方法
當前的行爲是,waitandsweep
方法被A調用,然後執行一些工作。當A在等待時,B正在調用等待某個時間並執行相同工作的相同方法。
爲A和B的等待時間將是1000
我預期的行爲是B的調用方法前等待,而等待等待時間和執行工作。
意思是,A的等待時間必須是1000,而B的等待時間必須是1000 + 1。
public class Wait {
long waitTime =1000;
Object lock = new Object();
boolean flag = true;
public static void main(String args[]){
final Wait wait = new Wait();
//Create two threads:
Thread thread1 = new Thread() {
public void run() {
wait.A();
}
};
Thread thread2 = new Thread() {
public void run() {
wait.B();
}
};
thread1.start();
thread2.start();
}
public synchronized void A(){
waitAndSweep("A");
}
public synchronized void B(){
waitAndSweep("B");
}
protected void waitAndSweep(String caller) {
try {
long waitTime = getWaitTime();
if (waitTime > 0)
wait(waitTime);
SomeWork();
System.out.println(caller + waitTime);
} catch (Exception e) {
}
}
private void SomeWork() {
this.waitTime = this.waitTime + 1;
}
public long getWaitTime() {
return waitTime;
}
public void setWaitTime(long waitTime) {
this.waitTime = waitTime;
}
}
電流輸出: A1000 B1000
預期輸出: A1000 B1001
我認爲我們需要做一些鎖定通知邏輯。
由於我不知道這一點,有人可以幫助我嗎?
您用[標籤:java]標記了這個問題,但我在這裏看不到任何代碼... –
請澄清更多。你希望線程A等待1000毫秒執行,並且比B等待1001毫秒執行? – virendrao
抱歉錯過了添加代碼。 – user5367186