这里写目录标题
Java多线程中join()方法和sleep()方法的区别
1.先声明MyThread子类继承Thread类
public class MyThread extends Thread {
public MyThread () {
}
public MyThread (String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i <= 20000; i++) {
System.out.println(getName() + i);
}
}
}
2.运行join()方法和sleep()方法
public class Demo05_ThreadFlowpath {
public static void main(String[] args) throws InterruptedException {
//验证一下sleep()方法
for(int i = 1; i <= 5; i++) { //for循环执行五次
Thread.sleep(1000); // 让线程暂停执行1000毫秒,也就是一秒
System.out.println("午休第" + i + "秒!");
}
System.out.println("叮铃铃..上班时间到,午休就五秒,不愧是资本家");
//*******************分割线join()方法*************
// 创建3个线程对象
MyThread t1 = new MyThread("一号很长长长");
MyThread t2 = new MyThread("二号短");
MyThread t3 = new MyThread("三号更更更长");
// 启动线程,一号和二号互相抢着执行,
t1.start();
t2.start();
// 因为join方法,所以直到t2执行结束,才会执行t3
t2.join(10000000); //这方法让等待一千万毫秒也就是10000秒,那我要等一万秒才会执行t3.start吗?
//居然没等一万秒,原来虽然t2.join(10000)方法里的毫秒数很大,但是t2执行结束后不管有没有到最大毫秒数,都会运行t3,
t3.start();
//*****************分割线再来一次sleep()方法***************
MyThread t4 = new MyThread("四号结束等十秒");
MyThread t5 = new MyThread("刷一下过去了");
MyThread t6 = new MyThread("刷一下也过去了");
t4.start();
t4.sleep(100000); //等100000毫秒也就是100秒才会执行后面的t5,t6
t5.start();
t6.start();
}
}
结论
一,sleep();调用后,线程会暂停执行指定的毫秒数。
二,join();方法调用后,一直等待这个线程死亡。
三,join(10000);方法调用后,试着等待这个线程10000毫秒。如果才100毫秒这线程就死亡了,那不用等10000毫秒了,直接执行下一个线程任务。