zoukankan      html  css  js  c++  java
  • Thread 的join方法

    package com.cn.test.thread;
    
    public class TestJoin extends Thread{
    
        private String name;
        public TestJoin(String name) {
            this.name = name;
        }
    
        public static void main(String[] args) {
            
            TestJoin join1 = new TestJoin("thread-1");
            TestJoin join2 = new TestJoin("thread-2");
            join1.start();
            join2.start();
            
            try {
                join1.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            System.out.println("main--------------------线程");
        }
        
        @Override
        public void run() {
        
            for (int i=0; i<3; i++) {
                System.out.println(Thread.currentThread().getName() + "i=" + i) ;
            }
        }
    
    }

    上述例子中: 在main方法中join1线程调用join方法,如果main方法抢到cpu的执行权,会将cpu的执行权让出来给join1线程,直到join1线程执行完毕之后才进行main线程的执行。join1和join2是同步进行竞争cpu的资源。

    运行结果:

    Thread-0i=0
    Thread-1i=0
    Thread-0i=1
    Thread-1i=1
    Thread-0i=2
    Thread-1i=2
    main--------------------线程

    main线程需要等待join1线程执行完毕之后才能进行执行

     Thread的join方法在start方法之前进行执行,不会触发这种cpu让出执行权的操作,此时和mian线程是并发执行的。

    package com.cn.test.thread;
    
    public class TestJoin extends Thread{
    
    	private String name;
    	public TestJoin(String name) {
    		this.name = name;
    	}
    
    	public static void main(String[] args) {
    		
    		TestJoin join1 = new TestJoin("thread-1");
    		TestJoin join2 = new TestJoin("thread-2");
    		try {
    			join1.join();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		join1.start();
    		join2.start();
    		
    		
    		
    		System.out.println("main--------------------线程");
    	}
    	
    	@Override
    	public void run() {
    	
    		for (int i=0; i<3; i++) {
    			System.out.println(Thread.currentThread().getName() + "i=" + i) ;
    		}
    	}
    
    }
    

      执行结果:

    main--------------------线程
    Thread-1i=0
    Thread-1i=1
    Thread-1i=2
    Thread-0i=0
    Thread-0i=1
    Thread-0i=2
    

      总结:join方法可以控制多线程的执行顺序。

  • 相关阅读:
    iTOP-4412开发板-串口基础知识和测试方法
    迅为i.MX6ULL终结者开发板-能想到的功能它都有
    Android4.4.2 源码编译-iMX6Q/D核心板-非设备树源码
    如何让Dev支持c++11特性
    2019年第十届蓝桥杯【C++省赛B组】
    upper_bound()和low_bound函数的基本使用和理解(转载,已获博主授权)
    C++的bitset(位操作使用),转载
    2018年第九届蓝桥杯【C++省赛B组】(未完)
    2013蓝桥杯预赛C/C++本科B组
    信用卡号验证
  • 原文地址:https://www.cnblogs.com/startSeven/p/10213645.html
Copyright © 2011-2022 走看看