zoukankan      html  css  js  c++  java
  • 07_控制线程_join_线程插队

    【join线程简述】

    join()方法:Thread提供的让一个线程去等待另一个线程完成。当在某个程序执行流中(如main线程)调用其它线程(如t2线程)的join方法(t2.join()),调用线程(main线程)将被阻塞,直到被join()方法加入的join线程(t2.start())执行完成为止。

    【示例代码】

    package com.Higgin.part02;
    
    class JoinThread implements  Runnable{
        
        //重写run方法,定义线程执行体
        public void run(){
            for(int i=0;i<100;i++){
                System.out.println(Thread.currentThread().getName()+"===="+i);
            }
        }
    }
    public class Demo01 {
        public static void main(String[] args) throws InterruptedException {
            JoinThread jt=new JoinThread();
            Thread t1=new Thread(jt,"Higgin");
            Thread t2=new Thread(jt,"被join的线程");
            t1.start();   //启动t1线程
            
            //下面属于main主线程
            for(int i=0;i<100;i++){
                if(i==20){
                    t2.start();   //启动t2线程
                    //main线程调用了t2线程的join方法,导致main线程必须等待t2执行结束才可以向下执行
                    t2.join();
                }
                System.out.println(Thread.currentThread().getName()+"===="+i);
            }
        }
    }

    【运行结果】

    一开始,main线程启动了名为"Higgin"的t1线程,此时总共两个线程并发执行,分别是main主线程和Higgin线程,

    后来在main主线程中的for循环中,当i==20时候,又启动了t2线程,并且调用了t2线程的join的方法,直接导致main线程阻塞。

    因为main线程已经阻塞,所以接下来是"Higgin"和"被join的线程"两者抢占运行,如果"被join的线程"运行结束,main线程进入就绪状态,然后抢占运行,如Higgin线程没结束的话。

    【补充】

    join()方法有三种重载形式;

    1. join() :即等待被join()的线程执行完成

    2. join(long millis):等待被join()的线程的最长时间为millis毫秒,如果时间到了,被join的线程仍未执行结束,那么就不等了。

    3. join(long millis,int nanos):增加了一个纳秒,等待被join()的线程的最长时间为millis毫秒和nanos纳秒(很少用,一般精确到毫秒就行)

  • 相关阅读:
    【mysql】关于binlog格式
    【linux】关于TCP三次握手和四次挥手
    【nginx】负载均衡和proxy的配置
    【PHP】$_POST, $HTTP_RAW_POST_DATA, and php://input
    【nginx】关于gzip压缩
    【nginx】配置文件的优化
    【集合框架】JDK1.8源码分析之TreeMap(五)
    【集合框架】JDK1.8源码分析之IdentityHashMap(四)
    【集合框架】JDK1.8源码分析之HashMap & LinkedHashMap迭代器(三)
    【集合框架】JDK1.8源码分析之LinkedHashMap(二)
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5903357.html
Copyright © 2011-2022 走看看