码迷,mamicode.com
首页 > 编程语言 > 详细

线程join方法 小demo

时间:2017-12-08 12:02:43      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:string   row   示例   class   col   strong   pack   设置   主线程   

1.第一个示例:

 1 package cn.threaddemo;
 2 
 3 public class T implements Runnable {
 4 
 5     public static int a = 0;
 6 
 7     @Override
 8     public void run() {
 9         System.out.print("t线程中的a:");
10         for (int k = 0; k < 5; k++) {
11             a = a + 1;
12             System.out.print(" "+a);
13         }
14     }
15 
16     public static void main(String[] args) throws Exception {
17         Runnable r = new T();
18         Thread t = new Thread(r);
19         t.start();
20         /*       */
21         System.out.println("主线程中的a:"+a);
22     }
23 
24 }

输出结果:

主线程中的a:0
t线程中的a: 1 2 3 4 5

这是因为,当主线程 main方法执行 System.out.println("主线程中的a:"+a); 这条语句时,t 线程还没有真正开始运行,或许正在为它分配资源准备运行。因为为线程分配资源需要时间,而main方法执行完t.start()方法后继续往下执行System.out.println(a);   这个时候得到的结果是a还没有被改变的值0 。

2.Question: 怎样才能让主线程中的输出结果为5, join() 方法提供了这种功能,在第一个代码的基础上进行修改如下:

 1 package cn.threaddemo;
 2 
 3 public class T1 implements Runnable {
 4 
 5     public static int a = 0;
 6 
 7     @Override
 8     public void run() {
 9         System.out.print("t线程中的a:");
10         for (int k = 0; k < 5; k++) {
11             a = a + 1;
12             System.out.print(" "+a);
13         }
14     }
15 
16     public static void main(String[] args) throws Exception {
17         Runnable r = new T1();
18         Thread t = new Thread(r);
19         t.start();
20         t.join();//把线程t强制合并到主线程,使两个线程顺序执行,t线程执行完成后,再接着执行主线程
21         System.out.println("\n主线程中的a:"+a);
22     }
23 
24 
25 }

执行结果如下:

技术分享图片

分析:thread.Join()方法把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

  第一个示例中t线程和主线程是交替运行,当主线程中加入t.join();语句后,线程执行顺序变成了:先执行线程t, t线程执行结束后再接着执行主线程,由原来的线程交替并行执行变成了顺序执行。

 3. 另外一种方式实现主线程中输出5:让主线程休眠一定时间,这种方式不能保证t线程一定会比主线程先执行完,当主线程设置休眠时间比较长时,可以保证t线程先于主线程完成

当主线程设置休眠时间比较短时,就不一定能保证了

 

线程join方法 小demo

标签:string   row   示例   class   col   strong   pack   设置   主线程   

原文地址:http://www.cnblogs.com/enjoyjava/p/8004290.html

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