• java--join方法


     1 package MyTest;
     2 
     3 class TestDemo implements Runnable {
     4 
     5     public void run() {
     6         int i = 0;
     7         for (int j = 0; j < 10; j++) {
     8             System.out.println(Thread.currentThread().getName() + " ---> "
     9                     + i++);
    10         }
    11     }
    12 }
    13 
    14 public class Demo1 {
    15     public static void main(String[] args) {
    16         TestDemo testDemo = new TestDemo();
    17         Thread t1 = new Thread(testDemo);
    18         t1.start();
    19         int i = 0;
    20         for(int x = 0;x<10;x++){
    21             if(i == 5){
    22                 try{
    23                     t1.join(1000);
    24                 }
    25                 catch (Exception e) {
    26                     // TODO: handle exception
    27                     System.out.println(e.getMessage());
    28                 }
    29             }
    30             System.out.println("main thread "+i++);
    31                 
    32         }
    33     }
    34 }
     1 main thread 0
     2 main thread 1
     3 main thread 2
     4 Thread-0 ---> 0
     5 Thread-0 ---> 1
     6 Thread-0 ---> 2
     7 Thread-0 ---> 3
     8 main thread 3
     9 main thread 4
    10 Thread-0 ---> 4
    11 Thread-0 ---> 5
    12 Thread-0 ---> 6
    13 Thread-0 ---> 7
    14 Thread-0 ---> 8
    15 Thread-0 ---> 9
    16 main thread 5
    17 main thread 6
    18 main thread 7
    19 main thread 8
    20 main thread 9

    [-]程序中调用join方法()

        在程序中共有两个线程,一个是main()另一个是t1,在程序运行至ti.join()之前,两个线程的运行时同时的,但是当调用了该方法之后,随后就一直运行线程t1直到该线程运行完毕。如上述结果中在第十行调用了join()方法。

      该无参数的方法,直到调用该方法的线程全部运行完毕之后才会运行其他的线程。

      join(long millis)和join(long millis,int nanos),[第一个只有一个毫秒,第二个精确到纳秒] 就是调用该方法的线程执行时间,也就是其他线程等待的时间。

      

      从上面的代码中可以看出,join将线程t1并入main中,在main中执行,直到t1执行完毕,再继续运行main线程。

    【注】:

    public class TestJoin {

    ……

    Thread t1;

    t1.start();

    try{

    t1.join();}catch(){}

    ……

    }

    class MyThread extends Thread{

    public void run(){

    ………………

    }

     在没有执行t1.start()之前,只有main主线程在执行,运行至t1.start()之后,两个线程并发,在try块中t1.join()在此将两个进程合为一个,但是在合并之前,t1.join()要将t1的run()全部运行完毕之后或者完成join()内规定的时间才可以继续执行在main()终止处继续执行下面的代码。【具体如图】

    具体代码以及输出结果:

     1 package Test;
     2 
     3 public class TestJoin {
     4 public static void main(String[] args) {
     5     MyThread2 t1 = new MyThread2("Stone");
     6 //    main 主线程运行
     7     
     8     t1.start();//两个线程都在运行
     9     try{
    10         t1.join();
    11 //        main()线程被终止,继续运行t1,直到t1运行完毕。
    12     }catch(InterruptedException e){}
    13     
    14     for(int i = 0;i<10;i++)
    15         System.out.println("It is a main thread."+i);
    16 }
    17 }
    18 
    19 class MyThread2 extends Thread {
    20     MyThread2(String str) {
    21         super(str);
    22     }
    23 
    24     public void run() {
    25         for(int i = 0;i<10;i++){
    26             System.out.println("I am "+getName()+' '+ i);
    27             try{
    28                 sleep(1000);
    29                 
    30             }catch(InterruptedException e){
    31                 return;
    32             }
    33             
    34         }
    35     }
    36 }
    37 
    38 
    39 I am Stone 0
    40 I am Stone 1
    41 I am Stone 2
    42 I am Stone 3
    43 I am Stone 4
    44 I am Stone 5
    45 I am Stone 6
    46 I am Stone 7
    47 I am Stone 8
    48 I am Stone 9
    49 It is a main thread.0
    50 It is a main thread.1
    51 It is a main thread.2
    52 It is a main thread.3
    53 It is a main thread.4
    54 It is a main thread.5
    55 It is a main thread.6
    56 It is a main thread.7
    57 It is a main thread.8
    58 It is a main thread.9
    View Code
  • 相关阅读:
    http响应状态码大全
    Oracle中start with...connect by子句的用法
    sql的连接查询
    spring框架等web程序在tomcat下的启动顺序
    rest模式get,post,put,delete简单讲解
    context-param和init-param的区别
    spring的webutils包。适用于访问httpservletrequest和httpservletresponse
    java日志的相关配置文件知识
    jquery开发插件提供的几种方法
    Node.js实现网络编程
  • 原文地址:https://www.cnblogs.com/plxx/p/3369576.html
Copyright © 2020-2023  润新知