线程相关的sleep()、yield()、wait()、join()方法介绍

1、Thread.sleep()与Thread.yield()都会暂缓当前线程执行,给其他线程执行机会(sleep会忽略优先级,yield则只会给优先级相同或者更高的线程),不会释放锁,只会释放CPU。

 

2、sleep()会让线程进入阻塞状态,yield()则不会(此时线程为就绪状态)。yield()不能保证线程一定会暂停,结果取决于虚拟机的线程调度器(各厂商的实现可能不同)。

 

3、Thread.sleep()可以精确指定休眠的时间,而Thread.yield()依赖于CPU的时间片划分。

 

4、Thread.sleep()会抛出中断异常,且能被中断,而Thread.yield()不可以。

 

5、join()方法会挂起当前线程的执行,直到另一个线程执行完之后才会继续执行,即可以用来控制多线程的执行顺序。比如在线程B中调用了线程A的join()方法,直到线程A执行完毕后,才会继续执行线程B。 join()方法内部是利用wait()方法实现的,join()相当于join(0)即wait(0)即无限等待一个线程直到该线程执行完毕。

 

6、wait()方法是属于Object类的,会释放当前锁,进入线程池等待,必须通过调用notify()/notifyAll()方法来重新唤醒线程。

 

posted on 2019-04-21 17:04  逍遥1989  阅读(638)  评论(0)    收藏  举报