我们一起来看一张图:
如何让出当前线程的执行权
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);
}
}
}
打印结果:
A-1
B-1
B-2
B-3
A-2
B-4
A-3
B-5
A-4
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