join()方法可以改变java里线程随机调度的现象,join方法会让使用join方法的线程处于等待的状态,只有当正在执行线程结束运行后后才会调用使用到join方法的线程。
用法:在新建线程的时候 new SimpleThread().join();
线程对象要被销毁要满足两个条件:一个是该线程对象没有被引用,一个是run方法停止运行了。但是当线程跳出了run方法,java虚拟机不一定知道线程已经执行完毕,这个需要一个过程,因此java中有了个yield方法,这个方法告诉java虚拟机,线程的任务已经完成了,可以释放该线程的CPU留给其他线程使用了。
用法:在run方法最后加上:yield();
线程的调度是以抢占式的方式进行,有时调度花去的时间太多,导致线程执行到yield时候线程对象可能已经被java虚拟机所回收了,因此在实际运用中yield用途还真的不大。
在实际运用中使用最多的Thread方法是sleep。让线程休息一段时间,换句话说就是让线程暂停固定的时间。
用法:sleep(100);
我们发现调用sleep方法的地方要抛出一个异常InterruptedException,为什么会有这个异常呢?原因很简单,休眠的线程也有可能被终止,例如使用thread里的interrupt方法就会导致线程的终止,这种情况违反了sleep函数设计的初衷,因此会有导致在此抛出。我们回到上面join方法,join方法使用时候也会抛出InterruptedException,为什么呢?其实我们在调用join方法时候,被调用join方法的线程也是像调用sleep方法那样被休眠起来,它等待前一个线程执行结束的时候才能唤醒它,但是只要是休眠的线程同样也有可能被中断,这种结果也是方法不愿意接受的情况,因此会有InterruptedException异常的抛出。
线程优先级:
这是java线程的优先级:
java.lang.Thread
public static final int MAX_PRIORITY 10
public static final int MIN_PRIORITY 1
public static final int NORM_PRIORITY 5
默认main方法也就是主线程的级别是5
全文参考:http://blog.csdn.net/jiangxinyu/article/details/7814077