1.Thread.yield()方法作用是:
暂停当前正在执行的线程对象,并执行其他线程。 yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相 同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。 结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果
2.Thread.sleep():
使当前线程睡眠至少多少毫秒(尽管它可能在指定的时间之前被中断)。
3.join()方法:
保证当前线程停止执行,直到该线程所加入的线程完成为止。然而,如果它加入的线程没有存活,则当前线程不需要停止, 在线程myMainThread中调用另一个线程对象myThread的join方法,意味着,myMainThread线程必须等待myThread这个线程指向完毕后,才能往下执行,相当于 此时myThread插入进来,邀请必须全部完成才放行。
如果使用的是join(long millis) ,则参数表示myMainThread线程的最长等待时间,这个数值过后,就不等了
4.几种特殊情况可能使线程离开运行状态:
1、线程的run()方法完成。2、在对象上调用wait()方法(不是在线程上调用)。
3、线程不能在对象上获得锁定,它正试图运行该对象的方法代码
4、线程调度程序可以决定将当前运行状态移动到可运行状态,以便让另一个线程获得运行机会,而不需要任何理由