java线程间如何通信?
的有关信息介绍如下:首先我们要了解什么是线程间通信:正常情况下,每个子线程完成了自己的任务之后就结束了,但是有些时候我们希望每个线程能够协同的工作,使其成为一个整体,这个时候就需要线程通信了。而在java中实现线程通信可以有两种方式:一、使用object类中提提供的方法object中提供了wait()、notify()、notifyAll()三种方法来实现线程通信,wait():告知被调用的线程进入等待,当其他线程调用notify()时才唤醒,wait()是释放锁的,notify()不释放锁。notifyAll()是唤醒所有调用了wait()方法的线程;注意wait()、notify()、notifyAll()必须要配合着synchronize关键字使用;下面通过线程通信,来模拟一个BlockingQueue:
二,可以使用Concurrent.util包下的countdowlatch和cyclicbarrier首先,大白话的说一下这两个概念:对于CountDownLatch来说,重点是“一个线程”, 是一个主线程它在等待, 而另外N个子线程在把“某个事情”做完之后主线程才可以继续执行接下来的操作。而对于CyclicBarrier来说,重点是N个子线程线程,他们之间任何一个没有完成,所有的子线程都必须等待。那么接下来直接上例子:CountDownLatch的使用例子
当线程t1执行到了countDown.await()时,t1线程阻塞,必须要等待t2与t3都执行了countDown.countDown();之后t1线程才能继续向下执行。final CountDownLatch countDown = new CountDownLatch(2);这行的意思是,await()要等待两个countDown()之后才结束阻塞;cyclicbarrier的使用例子:
CyclicBarrier barrier = new CyclicBarrier(3);这行的意思是,需要三个线程都调用了await()之后,这个三个线程才能继续往下执行,而CyclicBarrier 的await()方法也是让线程进入阻塞。以上是线程之间通信的两种方式,望采纳!