sleep()与yield()需要区分比较?

相同点:

  sleep()方法和yield()方法都是Thread类中的静态方法,都会使当前线程放弃cpu的使用,把cpu的运行机会让给别的线程,sleep()和yield()都不会释放锁。

不同点:

  1.sleep()方法把cpu让给其它线程,不会考虑其它线程的优先级,因此会给低级别的线程运行cpu的机会;yield()方法只会给与当前线程同一优先级别或者更高优先级的线程运行cpu的机会。

  2.当线程执行sleep(mils)后,当前线程会进入阻塞状态,参数mils指定休眠时间,休眠时间到后线程进入就绪状态;yield()执行后,当前线程是进入就绪状态。

  3.sleep()方法申明抛出InterruptedException异常;yield()方法没有申明抛出任何异常。

  4.sleep()方法比yield()方法具有更好的可移植性。不能依靠yield()方法来提高程序的并 发行能。对于大多数程序员来说,yield()方法的唯一用途是在测试期间人为地提高程 序的并发性能,以帮助发现一些隐藏的错误。

 

join()方法?

  运行中的线程A,可以调用线程B的join()方法,一旦调用A线程将进入阻塞状态,直到B线程执行结束,A才能恢复到就绪状态。join()有两个重载形式,join()和join(TimeOut),即可以设置A线程醒来的时间。