本文将介绍Java中的线程间通信:wait()方法、notify()方法、notifyAll()方法,并提供具体的代码案例,适合编程小白学习。通过本文的学习,你将能够更好地理解Java中线程通信的原理和实现方式。
wait()方法是Object类中的方法,用于使当前线程进入等待状态,直到另一线程调用notify()或notifyAll()方法唤醒该线程。
wait()方法的语法如下:
public final void wait() throws InterruptedException
其中,wait()方法不带任何参数,调用该方法的线程将一直等待,直到其他线程调用notify()或notifyAll()方法唤醒它。
下面是一个wait()方法的示例:
synchronized (lock) { while (condition) { lock.wait(); } // do something }
在上面的示例中,调用wait()方法的线程将一直等待,直到其他线程调用notify()或notifyAll()方法唤醒它。
notify()方法是Object类中的方法,用于唤醒一个在等待状态中的线程。如果有多个线程在等待,只有其中一个线程会被唤醒。
notify()方法的语法如下:
public final void notify()
下面是一个notify()方法的示例:
synchronized (lock) { condition = false; lock.notify(); }
在上面的示例中,调用notify()方法将唤醒一个在等待状态中的线程。
notifyAll()方法是Object类中的方法,用于唤醒所有在等待状态中的线程。
notifyAll()方法的语法如下:
public final void notifyAll()
下面是一个notifyAll()方法的示例:
synchronized (lock) { condition = false; lock.notifyAll(); }
在上面的示例中,调用notifyAll()方法将唤醒所有在等待状态中的线程。
下面是一个使用wait()、notify()和notifyAll()方法实现线程间通信的示例代码:
public class ThreadCommunication { public static void main(String[] args) { Object lock = new Object(); boolean condition = true; Thread t1 = new Thread(() -> { synchronized (lock) { while (condition) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("Thread 1 is running."); } }); Thread t2 = new Thread(() -> { synchronized (lock) { while (condition) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("Thread 2 is running."); } }); t1.start(); t2.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock) { condition = false; lock.notifyAll(); } } }
在上面的示例代码中,我们创建了两个线程t1和t2,这两个线程都会等待condition变量的改变。在主线程中,我们将condition变量的值改变,并调用lock.notifyAll()方法,唤醒等待的线程t1和t2。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com