当线程的run方法执行方法体中的最后一条语句后,并由执行return语句返回时,或者出现了方法中没有捕获的异常时,线程将终止。
有一种可以强制线程终止的方法:interrupt可以用来请求终止线程。当对一个线程调用interrupt方法时,线程的中断状态将被置位,每一个线程都具有boolean标记。每个线程都应该不时的检查这个标记,以判断线程十分被中断。
要想清楚中断状态十分被置位,首先调用静态的Thread.currentThread()方法获得当前线程,再调用isInterrupted
方法就可以判断的出来。一般格式是下面这样的
while(!Thread.currentThread().isInterrupted()&&more work to do)
{
//do more work
}
我们要清楚线程中断,只不过是把线程打上一个标记,其实线程的状态还是可运行的(理解成还在运行中)。这样我可以决定如何响应中断。
线程阻塞,那么isInterrupted实例方法就不能检测出中断标记,这样就会产生InterruptedException异常。
这种线程的run方法具体格式如下:
public void run()
{
try
{
//...
while(Thread.currentThread().isInterrupted()&&more work to do)
{
//do more work
}
}
catch(InterruptedException e)
{
}
finally
{}
}
注意点: Thread中有几个相似的方法,大家一定要区分开。
1.void interrupt(): 向线程发生中断请求,线程的中断状态将被设置为true.
2.static boolean
interrupted():这个是静态方法,检测当前线程(正在执行这个命令的线程)是否被中断。同时它还会清楚当前线程的中断状态重置为flase.
3.boolean inInterrupted() 这个是实例方法,检查线程十分被中断,它不会重置线程的中断状态。
4.static Thread currentThread():返回代表当前线程的Thread对象。
时间: 2024-10-11 01:05:48