sleep() 、join()、yield()有什么区别

本文深入探讨Java中用于线程控制的三种关键方法:sleep()、yield()和join()。详细解释了这些方法如何影响线程的执行,包括如何通过sleep()方法让线程暂停执行,yield()方法如何提供同优先级线程执行的机会,以及join()方法如何确保一个线程在另一个线程完成后才开始执行。
摘要由CSDN通过智能技术生成

1sleep()方法

    在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。此操作受到系统计时器和调度程序精准和准确性的影响,让其他线程有机会继续执行,但是它不释放对象锁。也就是如果有synchronized同步块,其他线程仍然不能访问共享数据,注意该方法需要捕获异常。

    比如有两个线程同时执行(没有synchronized),一个线程优先级为Max_PRIORITY,另一个为MIN_PRIORITY,如果没有sleep()方法,只有高的优先级的线程执行完成后,低优先级的线程才能执行;但当高优先级的线程sleep(5000)后,低优先级的就有机会执行了。

总之,sleep()可以使用低优先级的线程得到执行的机会,当然也可以让同优先级的线程有执行的机会。

2 yield()方法

    yield()方法和sleep()方法类似,也不会释放“锁标志”,区别在于,它没有参数,即yield()方法只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后,马上又被执行,另外yield()方法只能使用同优先级或者高优先级的线程得到执行机会,这也和sleep()方法不同

3 join()方法

    Thread的非静态方法join()让一个线程B“加入”到另一个线程A的尾部,在A执行完毕之前,B不能工作。

  Thread  t = new MyThread(); t.start(); t.jion();

保证当前线程是停止执行的,直到该线程所加入的线程完成为止。然而,如果它加入的线程没有存活,则当前线程不需要停止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值