Java中的线程间通信:wait()方法、notify()方法、notifyAll()方法

在Java中,多线程是非常常见的操作,但是线程间通信也是一个比较复杂的问题。线程间通信是指多个线程在进行协作时,需要进行信息的交换和同步,以完成某个任务。Java提供了三种线程间通信的方法:wait()、notify()和notifyAll()。


wait()方法

wait()方法是Object类中的一个方法,它的作用是让当前线程进入等待状态,直到其他线程调用了该对象的notify()或notifyAll()方法,才会唤醒该线程。


wait()方法的使用

//创建一个锁对象
Object lock = new Object();

//线程1
Thread thread1 = new Thread(() -> {
    synchronized (lock) {
        try {
            //线程1等待
            lock.wait();
            System.out.println("线程1被唤醒!");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
});

//线程2
Thread thread2 = new Thread(() -> {
    synchronized (lock) {
        //线程2唤醒线程1
        lock.notify();
        System.out.println("线程2唤醒线程1!");
    }
});

//启动线程
thread1.start();
thread2.start();

上面的代码演示了wait()方法的基本使用方法。首先创建了一个锁对象,然后创建了两个线程,线程1在锁对象上调用了wait()方法,线程2在锁对象上调用了notify()方法(notifyAll()方法与notify()方法的作用类似,只是唤醒的是所有等待该对象的线程)。运行代码后,可以看到线程1在等待状态中,直到线程2调用了notify()方法后,线程1才被唤醒。


notify()方法

notify()方法也是Object类中的一个方法,它的作用是唤醒在该对象上等待的一个线程。


notify()方法的使用

上面的代码已经演示了notify()方法的基本使用方法,这里就不再赘述。


notifyAll()方法

notifyAll()方法也是Object类中的一个方法,它的作用是唤醒在该对象上等待的所有线程。


notifyAll()方法的使用

上面的代码已经演示了notifyAll()方法的基本使用方法,这里就不再赘述。


以上就是Java中线程间通信的三种方法,它们可以很好地解决多线程协作时的同步问题。

猿教程
请先登录后发表评论
  • 最新评论
  • 总共0条评论