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

视频网站开发架构做网站卖专业卖文玩

视频网站开发架构,做网站卖专业卖文玩,百度网络推广,设计师服务平台网站1. 两阶段终止-interrupt Two Phase Termination 在一个线程T1中如何“优雅”终止线程T2?这里的【优雅】指的是给T2一个料理后事的机会。 错误思路 ● 使用线程对象的stop()方法停止线程(强制杀死) —— stop()方法…

1. 两阶段终止-interrupt

Two Phase Termination
在一个线程T1中如何“优雅”终止线程T2?这里的【优雅】指的是给T2一个料理后事的机会。

错误思路

● 使用线程对象的stop()方法停止线程(强制杀死
—— stop()方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁,其它线程将永远无法获取锁

● 使用System.exit(int)方法停止线程
—— 目的仅是停止一个线程,但这种做法会让整个程序都停止

2. 两阶段终止-interrupt分析

有如下场景,做一个系统的健康状态监控(记录电脑CPU的使用率、内存的使用率)实现定时监控。实现这样一个场景,可用一个后台的监控线程不断记录。
在这里插入图片描述
代码实现

import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.Test")
public class Test {public static void main(String[] args) throws InterruptedException {TwoPhaseTermination tpt=new TwoPhaseTermination();// 启动监控线程(每隔1秒执行监控记录)tpt.start();// 模拟非正常打断,主线程经过3.5后,被interrupt()===>优雅打断Thread.sleep(3500);tpt.stop();}
}
// 监控类代码
@Slf4j(topic = "c.TwoPhaseTermination")
class TwoPhaseTermination{// 创建监控线程private Thread monitor;// 启动监控线程public void start(){// 创建线程对象monitor=new Thread(()->{// 不断被执行监控while (true){// 获取当前线程对象,判断是否被打断Thread current = Thread.currentThread();if(current.isInterrupted()){// 若被打断log.debug("料理后事");break;}// 若未被打断(每隔2s执行睡眠,进行监控操作)try {Thread.sleep(1000);  // 情况1===>非正常打断(睡眠过程中)log.debug("执行监控记录");   // 情况2===>正常打断} catch (InterruptedException e) {e.printStackTrace();// 重新设置打断标记(sleep()被打断后会清除打断标记)current.interrupt();}}});monitor.start();}// 停止监控线程public void stop(){// "优雅"打断monitor.interrupt();}
}

运行结果
在这里插入图片描述

分析:监控线程每隔1s监控系统,主线程处于休眠状态,3.5秒后休眠状态被打断

*****interrupted()与isInterrupted()均为判断当前线程是否被打断,表面上看起来类似。但却有着很大的区别,调用isInterrupted()不会清除打断标记,而调用interrupted()判断完后会将打断标记清除

3.interrupt-打断Park线程

打断 park 线程, 不会清空打断状态
Park线程:不是Thread中的方法, 是LockSupport工具类中的方法,其作用也是使当前线程停下来

private static void test3() throws InterruptedException {Thread t1 = new Thread(() -> {log.debug("park...");LockSupport.park();log.debug("unpark...");log.debug("打断状态:{}", Thread.currentThread().isInterrupted());}, "t1");t1.start();sleep(1);t1.interrupt();
}

运行结果:调用park()后线程不会继续向下运行,使用interrupt()打断处在park状态的线程后此时线程会继续向下运行
在这里插入图片描述注意:打断标记为真的情况下,再次park会失效
在这里插入图片描述
如何使其park后还能再次停止下来?
可将打断标记置为假(使用Thread.interrupted(),其会将打断标记清除,置为假

http://www.yayakq.cn/news/52179/

相关文章:

  • 网站建设的费用入账又名林州站长网
  • d网站建设的目的做网站运营需要具备什么能力
  • 家装设计费用多少钱一平方重庆seo网站排名
  • 怎么发布自己做的网站电子商务网站建设规划开题报告
  • 无远低代码开发平台长春网站排名优化费用
  • 四子王旗建设局网站凡科与wordpress
  • 章丘哪里做网站中国网站有哪些公司
  • 游戏网站平台怎么做农业推广作业
  • 抖音创作者服务平台关键词优化易下拉效率
  • 国外海报设计网站网站备案通过后
  • 商丘家具网站建设做网站为什么要购买空间
  • 商洛城乡建设局网站wordpress风影
  • 网站设计要学什么互联网金融网站开发
  • 郑州专业网站推广优化公司天元建设集团有限公司拖欠农民工工资
  • 高埗网站仿做400电话实名制认证网站
  • 南京网站开发个人企业邮箱如何申请注册
  • 公司营销型网站建设策划书免费外贸网站模板下载
  • 合肥做企业建网站那家好WordPress邮箱注册慢
  • 嘉定区网站建设公司百度网站怎么建设
  • 厦门网站制作公司石家庄网站网站建设
  • 网站平台建设论文智能家居网站开发
  • 贷款公司通过做网站来给予平台贷款个人网站软件
  • 做网站公司哪家比较好开发app的平台
  • 做招商加盟的网站开展网络营销的企业
  • 网站模板哪个网站全面网站开发设计有哪些
  • 高端网站建设 企业网站建站.net美食网站开发源代码
  • pc蛋蛋网站开发上海有名网站建站开发公司
  • 青岛网站推广引流如何做国外的网站
  • 公司门户网站怎么做wordpress菜单
  • 建站合同网站里的动画效果图