线程相关的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()方法来重新唤醒线程。
浙公网安备 33010602011771号