首页 > 其他 > 详细

Java多线程初学者指南(5):join方法的使用

时间:2014-02-06 01:31:07      阅读:352      评论:0      收藏:0      [点我收藏+]

 在上面的例子中多次使用到了Thread类的join方法。我想大家可能已经猜出来join方法的功能是什么了。对,join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。下面的代码演示了join的用法

bubuko.com,布布扣
 1 package com.fly.join;
 2 
 3 public class JoinThread extends Thread {
 4     public static int n = 0;
 5 
 6     static synchronized void inc() {
 7         n++;
 8     }
 9 
10     public void run() {
11         for (int i = 0; i < 10; i++)
12             try {
13                 inc();
14                 sleep(3); // 为了使运行结果更随机,延迟3毫秒
15 
16             } catch (Exception e) {
17             }
18     }
19 
20     public static void main(String[] args) throws Exception {
21 
22         Thread threads[] = new Thread[100];
23         for (int i = 0; i < threads.length; i++)
24             // 建立100个线程
25             threads[i] = new JoinThread();
26         for (int i = 0; i < threads.length; i++)
27             // 运行刚才建立的100个线程
28             threads[i].start();
29         
30         System.out.println("args.length="+args.length);
31         if (args.length > 0)
32             for (int i = 0; i < threads.length; i++)
33                 // 100个线程都执行完后继续
34                 threads[i].join();
35         System.out.println("n=" + JoinThread.n);
36     }
37 
38 }
bubuko.com,布布扣

建立了100个线程,每个线程使静态变量n增加10。如果在这100个线程都执行完后输出n,这个n值应该是1000。

测试1: 上面运行的结果为不确定值,但是一般不等于1000。  因为并不是所有线程都运行完了,才执行最后的打印“n=" +JoinThread.n

测试2: 将31行代码修改为:args.length >= 0,  则结果输出一定为:1000.   即所有线程都执行完了才执行最后的打印“n=" +JoinThread.n

Java多线程初学者指南(5):join方法的使用

原文:http://www.cnblogs.com/dragonflyyi/p/3538488.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!