002基础api02之线程的停止(中断)
2018-01-21 15:46
337 查看
002基础api02之线程的停止(中断)
本节要点:- 自动停止与强制停止
- 线程的中断
自动停止与强制停止
线程自己运行完run代码之后正常退出,但是有些线程是无线循环的业务需要手动停止。调用下面所示的stop方法。由于它是一个强制停止线程的操作,容易造成数据不一致等问题。所以早就过期了,不建议使用我们也就不再讨论了。
@Deprecated public final void stop()
线程的中断
即使用interrupt()、interrupted()(或isInterrupted())方法相互配合来实现对线程的中断。其中interrupt()是设置线程的中断标志的方法,该方法在线程等待、睡眠等一些这样的操作中会主动抛出InterruptedException异常,这给中断提供了更加灵活的策略。另外两个则是获取当前中断标志的方法,当然它们俩也有稍微的区别。我们先看案例。public static void main(String[] args) throws InterruptedException { Thread thread = new Thread() { @Override public void run() { int count = 0; while(true) { //获取并清楚中断状态 boolean interrupted = Thread.interrupted(); //获取但不清楚中断状态 // boolean interrupted = Thread.currentThread().isInterrupted(); if(interrupted) { System.out.println("中断状态为真:"+interrupted); if(count > 0) { break; } count = 1;//发现中断标识后,再打印一次interrupt的值 }else { System.out.println("中断状态为假:"+interrupted); if(count > 0) { break; } } } } }; thread.start(); Thread.sleep(1000);//主线程休息两秒后中断副线程 thread.interrupt(); }
上述代码中。我们创建了一个匿名的Thread线程对象,start之后让主线程睡眠一秒,再去中断我们启动的线程。在run的业务逻辑中。我们不停的打印当前中断的标志信息,直到获得了中断标志为ture后再打印一次中断标志就退出当前线程。之所要在中断为ture之后再打印一次,目的是为了查看使用interrupted() 和 isInterrupted()不同的结果。
运行之后你会发现。interrupted()获取到ture之后,再一次打印的结果为false;而isInterrupted()正好相反,获取到ture之后再一次打印的是true。也就是说interrupted()方法会清除中断标志,而isInterrupted()则不会。
动手:
大家不妨去查看一下这两个方法的源代码,看看它们之间还有什么关联。练习一下通过sleep方法抛出的中断异常来实现对线程的停止。
单词
interrupt \ˌin-tə-ˈrəpt\ verb 打断、中断、打扰 [计算机]中断相关文章推荐
- 【Java基础_(线程篇_第一篇)】继承Thread;实现runnable;sleep、wait用法和区别;Thread和Runnable区别;线程停止
- 1.2.线程基础_中断线程
- GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
- C#中的线程 -- 同步基础(同步本质,线程安全,线程中断)
- java 多线程基础之二:线程的中断(interrupt)
- 【基础知识】JAVA线程-线程的中断
- 并发基础(九) java线程的终止与中断
- 驱动基础知识-怎么访问io,中断,产生线程,事件
- 多线程基础四(一)、停止不了的线程(interrupted、isInterrupted)
- java基础12:停止线程
- java基础学习__多线程(停止线程,守护线程,join方法)
- 【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)
- Java基础知识---线程的中断
- Java并发(基础知识)—— 创建、运行以及停止一个线程
- 并发基础(八) java线程的中断机制
- C#中的线程 -- 同步基础(同步本质,线程安全,线程中断)
- Java并发基础知识(内存栅栏+volatile+synchronized详解+java锁优化+wait notify+AbstractQueuedSynchronizer详解+线程中断)
- 【java并发】基础(2)--线程中断和终止
- Android 进程与线程基础知识 及 如何停止进程