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


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

     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 }

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

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

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

  • 相关阅读:
    实验4:开源控制器实践——OpenDaylight
    实验3:OpenFlow协议分析实践
    SDN实验2:Open vSwitch虚拟交换机实践
    实验1:SDN拓扑实践
    面向对象程序设计2020寒假作业3
    自我介绍
    Python进程和线程
    同步 Github fork 出来的分支
    Git指令中fetch和pull的区别
    Git多人协作维护仓库简单流程
  • 原文地址:https://www.cnblogs.com/dragonflyyi/p/3538488.html
Copyright © 2020-2023  润新知