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

网站项目怎么做的网络公司推广方案

网站项目怎么做的,网络公司推广方案,做礼品公司网站的费用,做网站时如何建立栅格写在开头 经过上几篇博文的学习,我们知道在Java中可以通过new Thread().start()创建一个线程,那今天我们就来思考另外一个问题:线程的终止 自然终止有两种情况: 1. 线程的任务执行完成; 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 can't 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(默认是 flase);
  • Thread.currentThread().isInterrupted():测试当前线程是否被中断。线程的中断状态会受这个方法的影响,调用一次可以使线程中断状态变为 true,调用两次会使这个线程的中断状态重新转为 false;
  • Thread.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.shuangfujiaoyu.com/news/3152.html

相关文章:

  • 做竞价网站需要什么样的空间百度应用商店app下载
  • 网站开发 多语言百度服务商
  • 包装纸箱怎么做网站关联词有哪些小学
  • html网站模板 淘宝商城社群营销的案例
  • 网站怎么做不换行文字代码百度今日小说排行榜
  • 社保网上服务平台江北seo综合优化外包
  • 万宁网站建设天津百度推广公司电话
  • 北京 网站 建设百度链接收录
  • 济南做网站优化国内永久免费域名注册
  • 四川民主法制建设官方网站佛山seo整站优化
  • 温州网站制作价格南京百度seo公司
  • 西安 网站搭建搜索引擎优化的目的是对用户友好
  • 哪些网站教你做美食的优化推广方案
  • 电子商务网站网站建设关键词快速排名怎么做
  • 江门网站建设费用班级优化大师功能介绍
  • 秒收录网站有哪些成人短期技能培训学校
  • 靠网站建设成功案例网络营销该如何发展
  • 建html5响应式网站的工具seo推广的方法
  • 做网站个人怎么赚钱吗推广平台网站热狗网
  • 部门网站建设宗旨商丘关键词优化推广
  • 网站数据库太大搬家还原500错误厦门百度关键词seo收费
  • 可以做直播的游戏视频网站网站推广工具有哪些
  • 做美女图片网站需要备案吗如何开网站呢
  • wordpress azure ftp网站内部优化有哪些内容
  • 合肥学网站设计友链交换网站
  • 如何建设公司网站知乎360建站和凡科哪个好
  • 分类网站建设方案国外产品推广平台
  • 海南网站建设介绍友情链接交换网
  • 手机上怎么做网站宣传推广方案范文
  • 如何做网站诊断seogw