在Java中,多线程是非常常见的操作,但是线程间通信也是一个比较复杂的问题。线程间通信是指多个线程在进行协作时,需要进行信息的交换和同步,以完成某个任务。Java提供了三种线程间通信的方法:wait()、notify()和notifyAll()。
wait()方法是Object类中的一个方法,它的作用是让当前线程进入等待状态,直到其他线程调用了该对象的notify()或notifyAll()方法,才会唤醒该线程。
//创建一个锁对象 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()方法也是Object类中的一个方法,它的作用是唤醒在该对象上等待的一个线程。
上面的代码已经演示了notify()方法的基本使用方法,这里就不再赘述。
notifyAll()方法也是Object类中的一个方法,它的作用是唤醒在该对象上等待的所有线程。
上面的代码已经演示了notifyAll()方法的基本使用方法,这里就不再赘述。
以上就是Java中线程间通信的三种方法,它们可以很好地解决多线程协作时的同步问题。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com