当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现

需求背景:如果没有采取什么措施,在开启分支线程后,当前线程继续往后执行,而不会阻塞等待分支线程,代码及运行结果如下。

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第1张图片

 

 

1. Thread类的join方法

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第2张图片

优点:如果当前线程需要指定某些线程结束后再执行,那么可调用对应线程的join方法。

缺点:因为join是实例方法,所以得知道线程对象的名称,如果程序比较复杂时,线程很多,不好操作。

 

2. Thread类的isAlive方法

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第3张图片

其实join方法底层也是调用isAlive方法,源码如下。

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第4张图片

 

3. Thread类的activeCount静态方法

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第5张图片

为什么活跃线程数是2呢??不就剩下主线程一个了吗?其实两个线程中有一个是IDEA创建,用于监控程序的,我们可以把这两个线程打印出来看看,如下图。

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第6张图片

而且,我们可以通过记事本编写一个Java文件,然后命令行编译运行看看不用IDEA时,有几个活跃线程。

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第7张图片

不用IDEA时,就一个活跃线程。但我们平时开发是用IDEA开发的,所以通过线程数来限制,不太可靠。

 

4. CountDownLatch类

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第8张图片

CountDownLatch内部机制简单解读:类内部有两个变量,一个表示要等待的线程数。另一个表示已经等待了几个线程。当等待的线程数达到了设定值,那么notifyAll方法将所有调用wait方法进入等待状态的线程唤醒。

 

5. 自己实现CountDownLatch

5.1 自己实现的CountDownLatch类如下。

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第9张图片

5.2 测试代码和运行结果如下

当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现_第10张图片

 

你可能感兴趣的:(Java,等待其它线程执行结束再执行,CountDownLatch)