该方法只是给线程设置了一个停止的标记 并不是真正的立即停止线程

  interrupted() 测试当前线程是否已经中断
  isInterrupted() 测试线程是否已经中断
  停止线程的方法:

  1. .异常法 (相当于return出去)
  2. package entity.thread;
  3.  
  4. public class Mythread extends Thread{
  5.  
  6. @Override
  7. public void run() {
  8. super.run();
  9. try {
  10. for(int i=;i<;i++){
  11. if(this.interrupted()){
  12. System.out.println("是停止状态了。。。");
  13. throw new InterruptedException();
  14. }
  15. System.out.println("i=" + (i+));
  16. }
  17. System.out.println("我在for下面");
  18. } catch (InterruptedException e) {
  19. System.out.println("进入异常方法了线程终止");
  20. e.printStackTrace();
  21. }
  22. }
  23.  
  24. public static void main(String[] args) throws InterruptedException {
  25. try {
  26. Mythread mh = new Mythread();
  27. mh.start();
  28. mh.sleep();
  29. mh.interrupt();
  30. } catch (Exception e) {
  31. System.out.println("main catch");
  32. e.printStackTrace();
  33. }
  34. System.out.println("end");
  35.  
  36. }
  37. }
  38.  
  39. 打印结果:
  40. i=
  41. i=
  42. end
  43. 是停止状态了。。。
  44. 进入异常方法了线程终止
  45. java.lang.InterruptedException
  46. at entity.thread.Mythread.run(Mythread.java:)
  47.  
  48. .在沉睡中被停止 (程序会直接抛异常)
  49. package entity.thread;
  50.  
  51. public class Mythread2 extends Thread{
  52.  
  53. @Override
  54. public void run() {
  55. super.run();
  56. try {
  57. System.out.println("run begin");
  58. Thread.sleep();
  59. System.out.println("run end");
  60. } catch (InterruptedException e) {
  61. System.out.println("在沉睡中被终止! 进入catch!"+ this.isInterrupted());
  62. e.printStackTrace();
  63. }
  64. }
  65. public static void main(String[] args) {
  66. try {
  67. Mythread2 mythread2 = new Mythread2();
  68. mythread2.start();
  69. mythread2.sleep();
  70. mythread2.interrupt();
  71. } catch (InterruptedException e) {
  72. System.out.println("main catch");
  73. e.printStackTrace();
  74. }
  75. System.out.println("end");
  76. }
  77. }
  78. 执行结果
  79. run begin
  80. end
  81. 在沉睡中被终止! 进入catchfalse
  82. java.lang.InterruptedException: sleep interrupted
  83. at java.lang.Thread.sleep(Native Method)
  84. at entity.thread.Mythread2.run(Mythread2.java:)

3.暴力停止 stop 方法 已经过时不建议使用并且会存在问题

interrupt 停止线程的更多相关文章

  1. Java多线程(五)停止线程 interrupt

    调用interrupt方法仅仅是在当前线程中打了一个停止的标记,并不是真正停止线程. this.interrupted() :测试当前线程是否已经中断,执行后具有将状态标志清除为false的功能 is ...

  2. 多线程-停止线程方式-Interrupt

    1 package multithread4; 2 /* 3 * 停止线程: 4 * 1,stop方法. 5 * 6 * 2,run方法结束. 7 * 8 * 怎么控制线程的任务结束呢? 9 * 任务 ...

  3. [改善Java代码]不使用stop方法停止线程

    线程启动完毕后,在运行可能需要终止,Java提供的终止方法只有一个stop,但是不建议使用此方法,因为它有以下三个问题: (1)stop方法是过时的 从Java编码规则来说,已经过时的方式不建议采用. ...

  4. java多线程之停止线程

    /*1.让各个对象或类相互灵活交流2.两个线程都冻结了,就不能唤醒了,因为根据代码要一个线程活着才能执行唤醒操作,就像玩木游戏3.中断状态就是冻结状态4.当主线程退出的时候,里面的两个线程都处于冻结状 ...

  5. java线程之停止线程

         在Java中有以下3种方法可以终止一个正在运行的线程:      1.使用退出标志,是线程正常退出,也就是run方法完成后线程终止.      2.使用stop方法强制终止线程,但不推荐使用 ...

  6. 多线程---其他方法 停止线程、守护线程、join方法

    第三方停止线程: 原来是stop(),因为该方法有些问题,所以被interrupt()方法取代,它的用途跟机制是 当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除,强制让线程恢复到 ...

  7. Thread之十:停止线程方法汇总

    在上篇文章<多线程的使用——Thread类和Runnable接口>中提到中断线程的问题.在JAVA中,曾经使用stop方法来停止线程,然而,该方法具有固有的不安全性,因而已经被抛弃(Dep ...

  8. 深入理解Java中停止线程

    一.停止线程会带来什么? 对于单线程中,停止单线程就是直接使用关键字return或者break,但是在停止多线程时是让线程在完成任务前去开启另外一条线程,必须放弃当前任务,而这个过程是不可预测,所以必 ...

  9. 正确停止线程的方式三 使用Thread类中的内置的中断标记位-----------不熟悉

    package charpter10; public class Processor implements Runnable { @Override public void run() { for ( ...

随机推荐

  1. Python—程序设计:单例模式

    单例模式 单例模式(Singleton Pattern)属于创建型模式,它提供了一种创建对象的最佳方式.这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,并提供一种访问其 ...

  2. Hadoop的常用指令

    -help:查看帮助 hadoop fs -help rm -rm [-f] [-r|-R] [-skipTrash] <src> ... : Delete all files that ...

  3. python 爬虫 多线程 多进程

    一.程序.进程和线程的理解  程序:就相当于一个应用(app),例如电脑上打开的一个程序. 进程:程序运行资源(内存资源)分配的最小单位,一个程序可以有多个进程. 线程:cpu最小的调度单位,必须依赖 ...

  4. ArrayList集合存储VO封装对象后调用的问题

    VO代码: public class VO4Blog { private int b_id; private int b_typeid; private String b_title; private ...

  5. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第二天】

    淘淘商城(SpringMVC+Spring+Mybatis)  是传智播客在2015年9月份录制的,几年过去了.由于视频里课上老师敲的代码和项目笔记有些细节上存在出入,只有根据日志报错信息作出适当的调 ...

  6. android studio compile api implementation 区别

    compile与api 二者等同,无区别 implementation与compile或implementation与api implementation编译的依赖只作用于当前的module.即APP ...

  7. UML-领域模型-属性

    1.属性预览 2.导出属性是什么? 3.属性使用什么样的数据类型? 常见的数据类型:boolean.Date.String(Text).Integer 其他常见的:SKU.枚举类型等 而在java类中 ...

  8. UML-领域模型-添加关联和属性

    1.何谓关联? 关联(association):一个类的全局变量引用了另一个类,就表示关联了这个类 2.何时使用关联? 长时间(需要记住)留存的需要关联:短时间的不需要.比如: 需要关联:老师教那些课 ...

  9. python3.x设置默认编码(sys.stdout.encoding和sys.defaultencoding)

    查了一会资料得出的结论是如果你用的是python3.x,那么就最好别去设置sys.defaultencoding或者sys.stdout.encoding记住在需要编码的时候用encode,解码的时候 ...

  10. 虚函数重载(overwrite) 继承覆盖问题

    引言 类接口需要添加默认参数,以适应不同情况调用, 但是clang-tidy 不允许在接口上设置默认参数,ps: 可能担心继承类里接口重新设置新默认参数而导致误用的情况 #include <st ...