zoukankan      html  css  js  c++  java
  • Java多线程的join()

    假设在main线程里又起了一个thread1线程,在调用了thread1.start()之后:

    如果在main线程里调用了thread1.join(),那么main线程将会block,直到thread1执行完了之后,main线程才会继续执行。

    如果在main线程里没有调用thread1.join(),那么main线程和thread1线程将会并行执行。

    测试代码如下:

     1 public class JoinThread extends Thread{
     2     public JoinThread(String name){
     3           super(name);
     4     }
     5     
     6     public void run(){
     7           for(int i=0; i<10; i++){
     8                 for(long k=0; k<100000000; k++){
     9                     System.out.println(this.getName() + ": " + i);
    10                 } 
    11           }
    12     }
    13     
    14     public static void main(String[] args){
    15           Thread thread1 = new JoinThread("AA AA");
    16           thread1.start();
    17           try{
    18                 thread1.join();                 //Join在这里~
    19           } catch(InterruptedException e) {
    20                 e.printStackTrace();
    21           }
    22           for(int i=0; i<10; i++){
    23               for(long k=0; k<100000000; k++){
    24                   System.out.println(Thread.currentThread().getName() + ": " + i);
    25               }   
    26           }
    27           System.out.println("over");
    28     }
    29 }

    以上代码的执行结果如下:

    AA AA: 0
    AA AA: 0
    AA AA: 0
    AA AA: 0
    AA AA: 0
    AA AA: 0

    这是因为main线程要等待thread1执行完了才能执行,因此thread1打印了一堆AA AA: 0

    而如果将第17到21行注释掉之后再运行,结果如下:

    main: 0

    AA AA: 0

    AA AA: 0

    AA AA: 0
    main: 0
    main: 0

    这是因为main线程和thread1线程在同时运行。

  • 相关阅读:
    (项目)在线教育平台(四)
    (项目)在线教育平台(三)
    (项目)在线教育平台(二)
    (项目)在线教育平台(一)
    (面试题)python面试题集锦-附答案
    (python)面向对象
    (python)数据结构---元组
    myEclipse 配置tomcat清除缓存
    Jquery浅克隆与深克隆
    列表上下无缝滚动
  • 原文地址:https://www.cnblogs.com/james6176/p/4304009.html
Copyright © 2011-2022 走看看