Java 方法上的同步

Java 方法上的同步,java,Java,这是一个示例程序 当前的行为是,waitandsweep方法被waiting-waiting调用,然后执行一些工作。当A在等待时,B正在调用相同的方法,该方法等待某个时间并执行相同的工作 对于A和B,等待时间均为1000 我期望的行为是B在调用方法之前必须等待,而A等待等待时间并执行工作 也就是说,A的等待时间必须是1000,B的等待时间必须是1000+1 public class Wait { long waitTime =1000; Object lock = new Object(

这是一个示例程序

当前的行为是,
waitandsweep
方法被waiting-waiting调用,然后执行一些工作。当A在等待时,B正在调用相同的方法,该方法等待某个时间并执行相同的工作

对于A和B,等待时间均为1000

我期望的行为是B在调用方法之前必须等待,而A等待等待时间并执行工作

也就是说,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;
}


}
电流输出: 1000 B1000

预期产出: 1000 B1001

我想我们需要做一些锁通知逻辑


由于我没有意识到这一点,有人能帮我吗?

只需将waitAndSweep标记为已同步:
public synchronized void waitAndSweep(){…}


请参阅:

创建同步的方法。在线程A释放对方法的锁定之前,您的线程B不会锁定(执行)该方法。

您将此问题标记为,但我在此处看不到任何代码……请进一步澄清。您希望线程A等待1000毫秒执行,而不是线程B等待1001毫秒执行?很抱歉,没有添加代码。等待(..)方法在哪里?我想这是这个行为的关键。创建同步的方法。在线程A释放对方法的锁定之前,线程B不会锁定(执行)该方法。@mainshraprajapati同步waitandsweep方法不起作用。因为第一个A进入waitandsweep等待1000毫秒,同时B进入waitandsweep等待同样的1000毫秒。因为waitTime只有在A执行SomeWork()后才会更改