码迷,mamicode.com
首页 > 其他好文 > 详细

浅析Thread的join() 方法

时间:2019-09-14 18:53:12      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:mic   时间   join()   判断   start   最简   nts   lis   png   

  Thread中的 join() 方法在实际开发过程中可能用的不是很多,但是在面试中作为考察基本功知识的扎实与否,经常会被用到。因此,对于 Thread 的 join() 方法进行了一定的研究。

 

  常见的一种情景是如何保证创建多个线程保证其按照指定的顺序执行,最简单的一种方法是采用Thread.join() 方法来实现。以下是写的创建若干个线程的示例代码,通过采用创建一个实体类,重写其里面的run 方法来实现。如果指定少数的线程数,可以直接采用 thread.join()来实现,其原理是一致的。

 1 public class Demo extends Thread{
 2     int i;
 3     Thread previousThread;
 4     public Demo3(int i, Thread previousThread) {
 5         this.i = i;
 6         this.previousThread = previousThread;
 7     }
 8 
 9     @Override
10     public void run(){
11         try {
12             previousThread.join();
13         } catch (InterruptedException e) {
14             e.printStackTrace();
15         }
16         System.out.println("顺序:"+i);
17     }
18 
19     public static void main(String[] args) {
20         Thread previousThread = Thread.currentThread();
21         for (int i=0; i<10; i++){
22             Demo3 demo3 = new Demo3(i, previousThread);
23             demo3.start();
24             previousThread = demo3;
25         }
26 
27     }
28 
29 }

 

  上述代码实现了想要的业务逻辑需求,那么其原理又是什么呢?老规矩,看源码。

   技术图片

   技术图片

  我们可以发现,其保证多个线程按照顺序执行的根本是采用了 wait()方法。当 millis为0时,表示没有设置阻塞的时间,通过 isAlive()方法判断线程的存活状态;若存活,则一直等待。只有当这个线程不存活时,才会停止阻塞,即保证了线程的顺序执行。需要注意的一点时,因为调用了 wait() 方法,因此其必须用 synchronized 修饰,保证在方法层面上的同步。

 

浅析Thread的join() 方法

标签:mic   时间   join()   判断   start   最简   nts   lis   png   

原文地址:https://www.cnblogs.com/Demrystv/p/11519748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!