当前位置: 首页 > news >正文

淘客网站开发源代码九游下载安装载

淘客网站开发源代码,九游下载安装载,会计网站建设,远洋国际建设有限公司网站写在开头 经过上几篇博文的学习#xff0c;我们知道在Java中可以通过new Thread().start()创建一个线程#xff0c;那今天我们就来思考另外一个问题#xff1a;线程的终止 自然终止有两种情况#xff1a; 1. 线程的任务执行完成#xff1b; 2. 线程在执行任务过程中发生异…写在开头 经过上几篇博文的学习我们知道在Java中可以通过new Thread().start()创建一个线程那今天我们就来思考另外一个问题线程的终止 自然终止有两种情况 1. 线程的任务执行完成 2. 线程在执行任务过程中发生异常。 start之后如果线程没有走到终止状态我们该如何停止这个线程呢 为什么stop终止不可用 翻看Thread源码后发现其提供过一个stop()方法可以用来终止线程我们看一下它的源码。 【源码解析1】 Deprecatedpublic final void stop() {SecurityManager security System.getSecurityManager();if (security ! null) {checkAccess();if (this ! Thread.currentThread()) {security.checkPermission(SecurityConstants.STOP_THREAD_PERMISSION);}}// A zero status value corresponds to NEW, it cant change to// not-NEW because we hold the lock.if (threadStatus ! 0) {resume(); // Wake up thread if it was suspended; no-op otherwise}// The VM can handle all thread statesstop0(new ThreadDeath());}这个方法使用了Deprecated修饰代表着它是废弃的方法在Java的编码规约中过时的方法不建议继续使用并且在这个方法的注释中官方也提示说这是一个不安全的强制恶意中断方法会破坏线程的原子性。 因此在这里强烈建议大家不要再用stop方法去停止线程了 如何优雅的停止一个线程 我们知道线程只有从 runnable 状态可运行/运行状态 才能进入terminated 状态终止状态如果线程处于 blocked、waiting、timed_waiting 状态休眠状态就需要通过 Thread 类的 interrupt() 方法让线程从休眠状态进入 runnable 状态从而结束线程。 这里就涉及到了一个概念“线程中断”这是一种协作机制当其他线程通知需要被中断的线程后线程中断的状态被设置为 true但是具体被要求中断的线程要怎么处理完全由被中断线程自己决定可以在合适的时机中断请求也可以完全不处理继续执行下去这样一来安全性就得到了保障。 Thread类中提供线程中断的方法如下 Thread.interrupt()中断线程。这里的中断线程并不会立即停止线程而是设置线程的中断状态为 true默认是 flaseThread.currentThread().isInterrupted()测试当前线程是否被中断。线程的中断状态会受这个方法的影响调用一次可以使线程中断状态变为 true调用两次会使这个线程的中断状态重新转为 falseThread.isInterrupted()测试当前线程是否被中断。与上面方法不同的是调用这个方法并不会影响线程的中断状态。 Ok写了那么多我们来写一个小的demo测试一下线程中断的方法。 【代码示例】 public class Test {public static void main(String[] args) {//测试系统监控器testSystemMonitor();}/*** 测试系统监控器*/public static void testSystemMonitor() {SystemMonitor sm new SystemMonitor();sm.start();try {//运行 10 秒后停止监控Thread.sleep(10 * 1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(监控任务启动 10 秒后停止...);sm.stop();} } /*系统监控器*/ class SystemMonitor {private Thread t;//线程中断标识private volatile boolean stop false;/*** 启动一个线程监控系统*/void start() {t new Thread(() - {while (!stop) {//判断当前线程是否被打断System.out.println(正在监控系统...);try {Thread.sleep(3 * 1000L);//执行 3 秒System.out.println(任务执行 3 秒);System.out.println(监控的系统正常!);} catch (InterruptedException e) {System.out.println(任务执行被中断...);//重新设置线程为中断状态保证JVM抛异常情况下中断状态仍为true。Thread.currentThread().interrupt();}}});t.start();}//线程中断void stop() {stop true;t.interrupt();} }在这里我们先创建了一个SystemMonitor类作为系统检测器每3秒一循环的进行检测考虑到在Thread.currentThread().isInterrupted()可能在某些情况下中断失效所以我们这里自定义一个stop变量作为线程中断的标识检测线程启动先对标识位进行判断。 然后我们在Test类中写一个测试方法调用这个系统监控器进行检测并设置10秒后调用stop方法中断检测线程将中断标识stop设置为true。启动代码后我们在控制台可以看到这样的输出 正在监控系统... 任务执行 3 秒 监控的系统正常! 正在监控系统... 任务执行 3 秒 监控的系统正常! 正在监控系统... 任务执行 3 秒 监控的系统正常! 正在监控系统... 监控任务启动 10 秒后停止... 任务执行被中断...与我们的预期一样监控线程在执行了3个循环的检测任务后被成功中断调。到这里我们就成功的、安全的、优雅的停止了一个线程啦 结尾彩蛋 如果本篇博客对您有一定的帮助大家记得留言点赞收藏呀。原创不易转载请联系Build哥 如果您想与Build哥的关系更近一步还可以关注“JavaBuild888”在这里除了看到《Java成长计划》系列博文还有提升工作效率的小笔记、读书心得、大厂面经、人生感悟等等欢迎您的加入
http://www.tj-hxxt.cn/news/135850.html

相关文章:

  • 南京建设集团网站企业模板网站
  • 网站建设第三方广州企业网站哪家好
  • 网站导航菜单设计湛江wx
  • 网站被黑应该怎么做响应式模板
  • 营销型网站建设思路帝国CMS做的淘客网站
  • 网站自己做推广微信怎么做网站的动图
  • 网站短时间怎么做权重外贸网站建设步骤
  • 网站对公司的作用是什么意思网络营销培训学院
  • 网站照片加水印门户网站建设会议纪要
  • 用asp做的网站如何发布西安网站seo技术
  • 展馆的科普网站建设上海装修公司排名前20
  • 网站建设的英语济南网站搭建公司
  • 怎么做免流网站创立公司最低多少钱
  • 江苏营销型网站建设沈阳黄页88企业名录
  • 即墨做网站优化大师网站
  • 工业设计专业介绍企业网站优化报告
  • 谷歌浏览器 安卓下载啥叫优化
  • 律师行业协会网站建设网站认证收费吗
  • 给领导发网站建设可行性方案邮件怎么写福州百度seo
  • 门户网站建设方案公司科技设计网站建设
  • 做设计素材网站有哪些网站开发意见书
  • 微商城网站建设信息网站开发神书
  • 注册网站的软件公司注册资金可以随便填吗
  • 企业网站制作找什么人旅游app用户人群分析
  • 恋月wordpress珠海关键词优化平台
  • 沈阳网站建设开发维护九里徐州网站开发
  • 现在最好的免费的建站平台长沙公司网站设计报价
  • 网贷网站建设仁寿县建设局网站
  • 如何建设一个购物网站建wap网站
  • jsp做网站用什么封装字符串遂宁移动网站建设