创建测试需要的类

  • 新建一个类MyThread,继承Thread
public class MyThread extends Thread {public int x = 0;public int y = 0;@Overridepublic void run() {//保证线程安全和原子性synchronized (this) {x++;try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}y++;}}/*** 打印x和y的值*/public void printXAndY() {System.out.println("x=" + x);System.out.println("y=" + y);}
}

用stop方法来中止线程

测试用main方法如下:

public class TestMain {public static void main(String[] args) throws Exception {MyThread myThread = new MyThread();//线程就绪myThread.start();//主线程先睡眠一秒,方便myThread线程把x++运行完Thread.sleep(1000);//调用stop方法myThread.stop();//确保线程已经中止while (myThread.isAlive()) {}//打印x和y的值myThread.printXAndY();}
}

结果如下:

可以发现x的值是1,而y的值却是0。所以从这里可以了解到stop方法的暴力之处了,stop方法会直接把运行中的线程强行中止掉,造成数据不一致的问题,导致了线程安全的问题,所以jdk其实不建议使用。

使用interrupt方法中止线程

public class TestMain {public static void main(String[] args) throws Exception {MyThread myThread = new MyThread();//线程就绪myThread.start();//主线程先睡眠一秒,方便myThread线程把x++运行完Thread.sleep(1000);//调用interrupt方法myThread.interrupt();//确保线程已经中止while (myThread.isAlive()) {}//打印x和y的值myThread.printXAndY();}
}

运行结果如下:

可以发现在sleep方法抛出了一个异常后,x和y的值都是1,线程是安全的。

总结:

  • stop方法不建议使用,它可能会导致线程安全问题
  • interrupt方法不会出现强制中止的情况,会抛出一个异常,线程是安全的

线程的stop方法和interrupt方法相关推荐

  1. 请简述一下线程的sleep()方法和yield()方法的区别?

    请简述一下线程的sleep()方法和yield()方法的区别? ①sleep()方法给其他线程机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会. yield()方法只会给相同优先级或更高优 ...

  2. 【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!

    来自:冰河技术 写在前面 新一轮的面试已经过去,可能是疫情的原因吧,很多童鞋纷纷留言说今年的面试题难度又提高了,尤其是对并发编程的知识.我细想了下,也许有那么点疫情的原因吧,但无论面试的套路怎么变,只 ...

  3. 据说有人面试栽在了Thread类的stop()方法和interrupt()方法上

    摘要:今天就简单的说说Thread类的stop()方法和interrupt()方法到底有啥区别. 本文分享自华为云社区<[高并发]又一个朋友面试栽在了Thread类的stop()方法和inter ...

  4. 并发基础篇(六):线程Thread类的start()方法和run()方法

    点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...

  5. 线程Thread类的start()方法和run()方法

    一.初识 java的线程是通过java.lang.Thread类来实现的.VM启动时会有一个由主方法所定义的线程.可以通过创建Thread的实例来创建新的线程.每个线程都是通过某个特定Thread对象 ...

  6. python 推迟运行_一文看懂Python的time模块sleep()方法和strftime()方法

    概述 今天主要介绍一下Python的time sleep()方法和strftime()方法. 一.Python time sleep()方法 Python time sleep() 函数推迟调用线程的 ...

  7. Java并发编程—schedule方法和scheduleAtFixedRate方法的区别

    原文作者:一叶丿清风 原文地址:schedule方法和scheduleAtFixedRate方法的区别 schedule方法和scheduleAtFixedRate方法都可以实现任务的延时和不延时执行 ...

  8. 精通Android自定义View(十五)invalidate方法和postInvalidate方法

    1 概述 invalidate方法和postInvalidate方法都是用于进行View的刷新,invalidate方法应用在UI线程中,而postInvalidate方法应用在非UI线程中,用于将线 ...

  9. Thread类的run方法和start方法

    Thread类的run方法和start方法 start方法是Thread类中的方法,用于启动新的线程.而调用run方法时,不会启动新的线程.在调用start方法后,程序会在后台启动新的线程.然后,由这 ...

  10. Java中sleep()方法和wait()方法的异同点

    前言 前几篇文章讲过wait()系列方法后,我们来对比看看它和sleep()方法有什么异同点.如果不了解wait()方法也没关系,文章中我会附上涉及到的文章.我们先从sleep()方法讲起,彻底搞清楚 ...

最新文章

  1. 【CV】吴恩达机器学习课程笔记第18章
  2. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...
  3. mongodb 安装与卸载
  4. 结构体DIR和dirent
  5. H3C 2126 限速后的问题
  6. openresty火焰图安装
  7. 绘制多个折线图_精品图表 | Excel绘制面板折线图
  8. 小瓦怕扫地机器人_小瓦扫地机器人青春版评测:便宜有好货
  9. 校园网破解|校园网wifi破解|校园网免认证教程-SaoPanel
  10. java 调用图灵接口_图灵机器人(问答机器人)API调用示例
  11. inter至强服务器处理器型号,至强cpu性能排行2021
  12. Android studio 如何连接手机
  13. 从五个方面来讲一下平面设计颜色搭配知识——黎乙丙
  14. 【Linux】time+dd测试硬盘读写速度
  15. 北京翰鑫信息科技有限公司怎么样
  16. 陪伴我成长的学习工作邮箱品牌——TOM邮箱
  17. 【读书笔记->统计学】04-02 利用概率理论预测和决策-条件概率、概率树、全概率公式、贝叶斯定理、相关与独立概念简介
  18. 网络协议与网络编程(双电脑串口通讯)
  19. 手机信号延迟测试软件,使用Fing在手机上诊断网络状况
  20. html5花瓣掉落,用掉落的花瓣,可以玩出多少种让人惊艳的创意?

热门文章

  1. 一个采集Android手机传感器数据的程序
  2. ubuntu升级22.04无法启动--ACPI BIOS Error
  3. 汇编语言期末不挂科必备复习知识点
  4. android app跳转到微信
  5. Git系列——删除文件的找回
  6. GAE(Generalized Advantage Estimation) PPO
  7. 佐治亚理工计算机科学录取,早规划获佐治亚理工学院GaTech CS硕士录取
  8. JAVA经典兔子问题
  9. 剑指Offer面试题11(Java版):数值的整数次方
  10. If you are using WebLogic you will need to add ‘org.slf4j‘ to prefer-application-packages in