线程拓展(join用法)

我们一起来看一张图:

如何让出当前线程的执行权

yield()方法,只在JDK某些内部实现才能看到,是让出执行权,基本用不到。让出之后变成可运行状态。

join方法

t.join()方法只会使主线程(或者说调用t.join()的线程)进入等待池并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。

分析:

package CSDN;
public class TestJoin {
 
	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		ThreadTest t1=new ThreadTest("A");
		ThreadTest t2=new ThreadTest("B");
		t1.start();
		t2.start();
	}
 
 
}
class ThreadTest extends Thread {
	private String name;
	public ThreadTest(String name){
		this.name=name;
	}
	public void run(){
		for(int i=1;i<=5;i++){
				System.out.println(name+"-"+i);
		}		
	}
}

打印结果:

  1. A-1

  2. B-1

  3. B-2

  4. B-3

  5. A-2

  6. B-4

  7. A-3

  8. B-5

  9. A-4

  10. A-5

可以看到两个线程是交替执行的。

当我们加入了join后:

package CSDN;
public class TestJoin {
 
	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		ThreadTest t1=new ThreadTest("A");
		ThreadTest t2=new ThreadTest("B");
		t1.start();
		t1.join();
		t2.start();
	}
}

打印结果:


A-1
A-2
A-3
A-4
A-5
B-1
B-2
B-3
B-4
B-5

猜你喜欢

转载自blog.csdn.net/qq_36428821/article/details/113443085