前言
1.interrupt方法的由来:在以前Java结束线程是使用stop方法,但是后来发现这样简单粗暴的结束线程是不友好的。这样的结果会导致线程占用的资源得不到释放。所以有了现在的interrupt方法给线程添加标记来结束线程。
2.interrupt方法只是给线程添加中断标记并不会结束线程。
3.线程在某些特定的操作下会检查自身是否存在中断标记,如果存在中断标记则会抛出一个interruptException异常。我们在异常处理时就可以关闭线程占用的异常并结束线程。
4.特定操作是指线程或者Object使用以下方法:
Object.wait(),
Object.wait(long),
Object.wait(long, int),
Thread.sleep(long),
Thread.interrupt(),
Thread.interrupted()。
实例
我这里就使用Thread.sleep()方法来简单说明。
package ThreadTest;
public class ThreadTest {
public static void main(String[] args) {
//创建t1线程
Thread t1 = new Thread(new MyThread());
t1.start();
//主线程线程每隔100毫秒打印线程名称和1-9
for (int i = 1;i<9;i++){
System.out.println(Thread.currentThread().getName()+i);
try {
if (i==5){
//当主线程执行到i==5时给t1线程打上中断标记
t1.interrupt();
}
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyThread implements Runnable {
@Override
public void run() {
//线程任务是每隔100毫秒打印线程名称和1-9
for (int i = 1;i<10;i++ ){
System.out.println(Thread.currentThread().getName()+":"+i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
//关闭线程占用的资源和关闭线程,因为我设计的这个线程没有占用资源,所以就直接使用return结束线程。
System.out.println("发现中断标记,结束线程");
return;
}
}
}
}
最后:如果认为我的这篇博客写的还不错可以顺手点个赞!关注我就不强求了。