①sleep(long millis): 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
②join():指等待t线程终止。
join是Thread类的一个方法,启动线程后直接调用,即join()的作用是:“等待该线程终止”,这里需要理解的
就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程
结束了才能执行。
Thread t = new AThread(); t.start(); t.join();
为什么要用join()方法
在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程
之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程
执行完成之后再结束,这个时候就要用到join()方法了。
不加join。
package com.multithread.learning;
/**
* 多线程学习,join
* @author Leon.Sun
*
*/
public class Thread1 extends Thread {
private String name;
public Thread1(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 线程运行开始!");
for(int i=0;i<5;i++) {
System.out.println("子线程" + name + "运行 : " + i);
try {
sleep((int)Math.random()*10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " 线程运行结束!");
}
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName() + "主线程运行开始!");
Thread1 m1 = new Thread1("A");
Thread1 m2 = new Thread1("B");
m1.start();
m2.start();
System.out.println(Thread.currentThread().getName() + "主线程运行结束!");
}
}
输出结果:
main主线程运行开始!
main主线程运行结束!
Thread-0 线程运行开始!
子线程A运行 : 0
Thread-1 线程运行开始!
子线程B运行 : 0
子线程B运行 : 1
子线程A运行 : 1
子线程B运行 : 2
子线程A运行 : 2
子线程B运行 : 3
子线程A运行 : 3
子线程B运行 : 4
子线程A运行 : 4
Thread-1 线程运行结束!
Thread-0 线程运行结束!
发现主线程比子线程早结束