Java 多线程基础 – stop()方法

stop方法:强制停止一个正在运行的线程,无论此时线程是何种状态。
stop方法在停止线程时需要自行指定线程退出逻辑,否则线程会立即退出,不做任何清理操作,非常不安全,会造成数据不一致问题。

此处引用API的介绍
该方法具有固有的不安全性。用 Thread.stop 来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 ThreadDeath 异常的一个自然后果)。
如果以前受这些监视器保护的任何对象都处于一种不一致的状态,则损坏的对象将对其他线程可见,这有可能导致任意的行为。
stop 的许多使用都应由只修改某些变量以指示目标线程应该停止运行的代码来取代。
目标线程应定期检查该变量,并且如果该变量指示它要停止运行,则从其运行方法依次返回。
如果目标线程等待很长时间(例如基于一个条件变量),则应使用 interrupt 方法来中断该等待。

以下展示了对于写入文件线程使用Stop会立即关闭线程,不会等待任务结束

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;public class StopDemo {public static void main(String[] args) {StopThread thread=new StopThread();thread.start();try {Thread.sleep(10000);} catch (InterruptedException e) {//一般会处理中断异常,这里作为例子就直接打印到控制台了e.printStackTrace();}//暂停线程thread.stop();while(thread.isAlive()){//确保线程已经终止}}private static class StopThread extends Thread{private int i = 0;@Overridepublic void run(){synchronized (this) {//增加同步锁,确保线程安全BufferedWriter out = null;try {out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("runoob.txt", true)));while (i < 1000){// 将i 写入文件//休眠1秒,模拟耗时操作out.write("写入" + i+"\r\n");i++;Thread.sleep(1000);}} catch (Exception e) {e.printStackTrace();} finally {try {assert out != null;out.close();} catch (IOException e) {e.printStackTrace();}}}}}
}

stop方法的代替方法:
1 使用状态变量 通过改变变量的状态决定停止某个线程。为了保证线程间的即时通信,需考虑使用volatile或者synchronized机制。
2 interrupt方法
Thread.interrupt() //中断线程
Thread,isInterrupted()判断是否被中断
Thread.interrupted()判断是否被中断,并清除当前中断状态
中断的功能比stop()更为强劲,可以停止wait()方法和sleep()方法

Java多线程--1--stop方法相关推荐

  1. Java多线程的使用方法,Thread,Runnable

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 多线程的使用方法 方式一:继承Thread类 下载网络图片示例 方式二:实现Runnable接口 方式三:实现Callable 小结 ...

  2. 【Java之多线程(二)】(***重要***)Java多线程中常见方法的区别,如object.wait()和Thread.sleep()的区别等

    1.Java中Thread和Runnable的区别??? 区别: 在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处: 避免点 ...

  3. Java多线程中notifyAll()方法使用教程

    简介 本文将承接<Java多线程wait()和notify()系列方法使用教程>,结合代码实例,补充讲解下notifyAll()方法的作用以及使用时需要注意的地方. 一.notifyAll ...

  4. java多线程优先级的方法_Java多线程以及线程优先级

    文章目录 1 继承Thread类多线程的实现获取和设置线程名称线程优先级 2 实现Runnable接口3 实现Callable接口4 使用线程池 1 继承Thread类 多线程的实现 实现多线程只需要 ...

  5. JAVA多线程中wait()方法的详细分析

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119645679 本文出自[赵彦军的博客] 文章目录 wait 和 notify 简 ...

  6. JAVA多线程中join()方法的详细分析

    虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像 ...

  7. java多线程的join方法_java多线程系列_join方法的使用(5)

    在上面的例子中多次使用到了Thread类的join方法.我想大家可能已经猜出来join方法的功能是什么了.对,join方法的功能就是使异步执行的线程变成同步执行.也就是说,当调用线程实例的start方 ...

  8. Java多线程下载分析方法

    为什么要多线程下载 俗话说要以终为始,那么我们首先要明确多线程下载的目标是什么,不外乎是为了更快的下载文件.那么问题来了,多线程下载文件相比于单线程是不是更快? 对于这个问题可以看下图. 横坐标是线程 ...

  9. Java多线程中join方法详解

    join()方法用于让当前执行线程等待join线程执行结束.其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待. join()方法部分实现细节 while(isAli ...

  10. Java多线程(join方法)

    2019独角兽企业重金招聘Python工程师标准>>> join方法主要用于线程的优先运行,当有N个线程同时运行时,其中有一个线程只要调用join方法,其他所有的线程包括主线程都暂停 ...

最新文章

  1. 普罗米修斯 监控_完美的分布式监控系统——普罗米修斯
  2. BAT教程 :第六节(if命令讲解)
  3. 搞硬件,别吹牛了,好好做个规划!
  4. 用WindowManager实现Android悬浮框以及拖动事件
  5. 亚马逊AWS IoT
  6. 河北省第三届研究生数学建模B题(二等)交通检测器数据质量控制及预测
  7. 针式打印机色带选购知识要点解说
  8. 全球及中国手机塔防游戏行业研究及十四五规划分析报告(2022)
  9. 什么是自行车码表?自行车码表工作原理?自行车码表安装设置?
  10. video标签设计vue视频播放器组件
  11. WIFI6 芯片厂商制程工艺
  12. PCIE 设备在位检测机理
  13. 将CDLINUX装入U盘
  14. C++中try--catch用法
  15. 利用TensorFlow搭建CNN,DNN网络实现图像手写识别,总结。
  16. Firebase 动态链接
  17. 中国计算机用户特刊,高考特刊|大佬的高考史,是互联网的凡尔赛史
  18. texlive2020 安装_TeXLive2020 Windows 10 简要安装手册
  19. 外文图书期刊数据库文献检索
  20. 郑州史丹利家居经销商这颗老鼠屎,如何一步步毁了百年品牌?

热门文章

  1. 骑士游历问题——至少需要多少步
  2. 信息与计算机科学学校排名,2021中国信息与计算科学专业大学排名 最好的高校排行榜...
  3. 转:YY淘宝商品数据库设计
  4. 钢铁骑士团服务器端文件,《钢铁骑士团》新手必读 游戏道具介绍
  5. 华为ME909之4G模块的开发
  6. win10麦克风直接输出声音_win10系统音频前后同时有声音输出的技巧
  7. java计算机毕业设计高速公路收费管理源码+mysql数据库+系统+lw文档+部署
  8. 不同币种间的清账 应付账款是USD记账 预付账款账款是人民币记账 如何清账
  9. R语言使用grid包的unit函数将数据对象转化为有计量单位的数据(例如转化为毫米单位、长度单位mm)
  10. 分享多引擎样本查毒网站+多款杀软在线查毒网站