Java在执行相同操作的线程上使用wait/notify方法
我试图理解Java上的监视器,我遇到的问题是如何让运行相同同步方法的线程等待? 我试图制作一个简单的程序,让3个线程使用相同的方法添加到N元素1中,总共10000次,我想知道当一个线程正在添加方法时,如何让其他线程等待,如果我同时启动所有线程,那么在添加完方法后通知所有线程 这是我编写的程序,没有使用等待/通知函数:Java在执行相同操作的线程上使用wait/notify方法,java,multithreading,Java,Multithreading,我试图理解Java上的监视器,我遇到的问题是如何让运行相同同步方法的线程等待? 我试图制作一个简单的程序,让3个线程使用相同的方法添加到N元素1中,总共10000次,我想知道当一个线程正在添加方法时,如何让其他线程等待,如果我同时启动所有线程,那么在添加完方法后通知所有线程 这是我编写的程序,没有使用等待/通知函数: class Swapper implements Runnable{ int number; Swapper(int number){ this.n
class Swapper implements Runnable{
int number;
Swapper(int number){
this.number=number;
}
@Override
public void run() {
while (mainClass.counter>0){
mainClass.incArrayElement(number);
}
}
}
public class mainClass {
public static volatile int counter = 10000;
public static volatile int[] testArray = new int[]{0,0,0};
public static synchronized void incArrayElement(int index){
if (counter>0) {
testArray[index - 1]++;
counter--;
}
else {
return;
}
}
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(new Swapper(1));
Thread thread2 = new Thread(new Swapper(2));
Thread thread3 = new Thread(new Swapper(3));
thread1.start();
thread2.start();
thread3.start();
thread1.join();
thread2.join();
thread3.join();
int checkSum = 0;
for (int i = 0; i < testArray.length; i++) {
System.out.println(testArray[i]);
checkSum+=testArray[i];
}
System.out.println(checkSum);
}
}
当线程调用类的同步方法“InborayElement”时,它获取该对象的锁,只要获取锁的前一个线程没有释放锁,任何新线程都不能调用同一对象的任何同步方法。因此,所有其他线程将被阻塞,直到执行完成
既然线程已经被阻塞并正在等待,那么为什么需要让线程调用wait呢。不幸的是,您的示例选择得不好 声明为synchronized的方法的控制方式是其他线程无法调用它,除非它已完成执行。然后其中一个线程再次调用此方法。”因为你无法控制哪个线程,所以不能真正告诉它。使用wait和notify函数也不会让您控制此操作。所以,如果这就是你想要的,你就无法实现你想要的。这对你来说仍然是不确定的
如果只是确保一次只有一个线程调用该方法,那么您已经有了该行为,不需要等待或通知。您的问题到底是什么?因此,目标是让其他线程在执行同步方法时使用wait方法,然后在同步方法完成后通知他们。那么我应该在哪里添加wait方法呢?