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();
保证当前线程是停止执行的,直到该线程所加入的线程完成为止。然而,如果它加入的线程没有存活,则当前线程不需要停止。