----------------------
android培训、
java培训、期待与您交流! ----------------------
我们使用多线程一般是因为好几个线程都要进行循环,所以run方法里一般都是循环体。
只有run方法结束(也就是循环体不符合判断条件了,跳出)才表示这个线程结束。
但有时候一个线程处于冻结状态(wait或sleep很长时间),自己无法去判断循环体的结束条件,且没有别的线程来唤醒它,就算别的线程运行完了,程序也一直挂着,并不做事,那么我们如何让它结束线程呢?
Thread类中提供了这些方法:
1、
sopt
此方法在1.5版本开始就过时了,不再用。
2、interrupt
主函数里使用thread1.interrupt(),则
线程冻结以后,
中断上述冻结状态,强制恢复运行,就会
去判断循环体的结束条件,从而结束线程。
interrupt可用于对wait,sleep,join的中断。
3、setDaemon
必须在启动线程之前调用,
thread1.
setDaemon(),
将当前线程记为守护(即后台)线程。
作用:前台所有线程运行结束后,所有后台线程自动结束,退出jvm。
4、join 注意:要抛出InterruptionException,或内部处理
A线程里开启
thread1后若写了
thread1.join(),则A把cpu执行权给
thread1,知道
thread1完成了才能执行A。
5、yield
并不是结束线程,只是暂停一下当前正在执行的线程,让其他线程增加获取执行权的机会。