线程初步(五)---join,yield

今天我们来学习一下线程里面的两个方法
一、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方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值