1. Thread.yield():
api中解释: 暂停当前正在执行的线程对象,并执行其他线程。
注意:这里的其他也包含当前线程,所以会出现以下结果。
例子:
public class ThreadTest implements Runnable{for循环里面加上一个yield(),表示执行了一次后,将时间片让出来,然后多个线程再继续抢时间片。(时间片,那个线程抢到时间片,那个就运行)
boolean keepRunning=true;
@Override
public void run() {
while(keepRunning){
for(int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"["+i+"]");
Thread.yield();
}
}
System.out.println(Thread.currentThread().getName()+"结束...");
}
}
这个例子会出现很多交叉的现象,就是因为这个方法。输出一次后,让出时间片。
同级别的线程的情况下,谁也不知道下个时间片是那个线程拥有。
2. Thread.sleep(long millis):
解释:使当前线程暂停millis所指定的毫秒,转到执行其它线程。
3. Thread.stop():
解释:错误的停止线程的方法!!!
用一个词来形容就是戛然而止,立马停止。例如上面的代码案例,如果用stop方法停止线程,此时线程正在for中,则会立即停止,将不会执行while外的输出语句。
正确停止的方法则是,将当前线程的keepRunning属性赋值为false。只有在这样,线程才不会立即停止,并且会完整的结束。
拿上述代码举个例子:当for循环的i还没有结束时,则会将for运行结束后,最后显示当前线程结束。
总之而言,这样会使线程有始有终。