今天我们来学习一下线程里面的两个方法
一、join();
join方法:等待线程终止。
使用方法 线程名.join();
表示的是当前线程加入,当新加入的线程加入,原先的线程才会开始执行,接下来我们写一个小程序来演示一下
/**
* 本次程序主要是了解线程中join方法
* join();等待线程终止
* @author lover
*
*/
class JoinDemo implements Runnable{
public void run(){
for(int i=0;i<=20;i++){
System.out.println(Thread.currentThread().getName()+"-------->"+i);
}
}
}
public class ThreadJoinDemo {
public static void main(String[] args) {
JoinDemo t=new JoinDemo();
//JoinDemo t2=new JoinDemo();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.start();
try {
t1.join();//使用join方法,使t1加入,main主线程会在t1结束时才会执行
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t2.start();
for(int k=0;k<=20;k++){
System.out.println("main----->"+k);
}
}
}
我们在t1线程开始时使用join方法。当主线程读到join方法时,主线程释放执行权,会等t1执行结束后才会执行。和t2争夺执行权交替运行。我们来看一下结果
Thread-0-------->0
Thread-0-------->1
Thread-0-------->2
Thread-0-------->3
Thread-0-------->4
Thread-0-------->5
Thread-0-------->6
Thread-0-------->7
Thread-0-------->8
Thread-0-------->9
Thread-0-------->10
Thread-0-------->11
Thread-0-------->12
Thread-0-------->13
Thread-0-------->14
Thread-0-------->15
Thread-0-------->16
Thread-0-------->17
Thread-0-------->18
Thread-0-------->19
Thread-0-------->20
main----->0
Thread-1-------->0
main----->1
Thread-1-------->1
main----->2
Thread-1-------->2
main----->3
Thread-1-------->3
Thread-1-------->4
Thread-1-------->5
Thread-1-------->6
main----->4
Thread-1-------->7
main----->5
Thread-1-------->8
main----->6
Thread-1-------->9
main----->7
Thread-1-------->10
main----->8
Thread-1-------->11
main----->9
Thread-1-------->12
main----->10
Thread-1-------->13
main----->11
Thread-1-------->14
main----->12
Thread-1-------->15
main----->13
Thread-1-------->16
main----->14
Thread-1-------->17
main----->15
Thread-1-------->18
main----->16
Thread-1-------->19
main----->17
Thread-1-------->20
main----->18
main----->19
main----->20
如果我们将t1.join方法放在t2.start();之后,将会出现,刚开始t1与t2开始运行,等t1运行结束后,main主线程开始执行。
二、yield
yield();:暂停当前正在执行的线程对象,并执行其他线程。
解释:当前线程释放执行权,执行权再次随机的切到包括它自己在内的其他线程
我们来看一个例子
/**
* 本次程序我们来了解yield();方法
* 暂停当前正在执行的线程对象,并执行其他线程。
* @author lover
*
*/
class YieldDemo implements Runnable{
public void run(){
for(int i=0;i<=20;i++){
System.out.println(Thread.currentThread().getName()+"------>"+i);
Thread.yield();
}
}
}
public class ThreadYieldDemo {
public static void main(String[] args) {
YieldDemo t=new YieldDemo();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.start();
t2.start();
for(int k=0;k<=20;k++){
System.out.println("main------->"+k);
}
}
}
当线程执行到yield方法时,该线程将释放执行权,此时三个线程争夺执行权,我们来看下结果
main------->0
Thread-1------>0
Thread-0------>0
Thread-1------>1
main------->1
Thread-1------>2
Thread-0------>1
Thread-1------>3
main------->2
Thread-1------>4
Thread-0------>2
Thread-1------>5
main------->3
Thread-1------>6
Thread-0------>3
Thread-1------>7
main------->4
Thread-1------>8
Thread-0------>4
Thread-1------>9
main------->5
Thread-1------>10
Thread-0------>5
Thread-1------>11
main------->6
Thread-1------>12
Thread-0------>6
Thread-1------>13
main------->7
Thread-1------>14
Thread-0------>7
Thread-1------>15
main------->8
Thread-1------>16
Thread-0------>8
Thread-1------>17
main------->9
Thread-1------>18
Thread-0------>9
Thread-1------>19
main------->10
Thread-1------>20
Thread-0------>10
main------->11
Thread-0------>11
main------->12
Thread-0------>12
main------->13
Thread-0------>13
main------->14
Thread-0------>14
main------->15
Thread-0------>15
main------->16
Thread-0------>16
main------->17
Thread-0------>17
main------->18
Thread-0------>18
main------->19
Thread-0------>19
main------->20
Thread-0------>20
以上就是线程join和yield方法