没有恢复中断状态时,在Step1执行期间发生中断,Step2操作还会继续,这就存在让数据出现不一致的风险:

import java.util.concurrent.TimeUnit;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*2015-4-9*/
public class InterruptedDemo {private static final Logger LOGGER=LoggerFactory.getLogger(InterruptedDemo.class);public static void main(String[] args) throws InterruptedException {Thread playgame=new Thread(new TaskRunner(), "do a work");playgame.start();int waitTime=5;LOGGER.info("tips: task will be cannel ,after {}s",waitTime);TimeUnit.SECONDS.sleep(waitTime);playgame.interrupt();}}class TaskRunner  implements Runnable{private static final Logger LOGGER=LoggerFactory.getLogger(TaskRunner.class);@Overridepublic void run() {Step step1=new Step("step1",20);try {step1.process();} catch (InterruptedException e) {LOGGER.info("clean 、 backup or other business .............");LOGGER.error("step1 Fail",e);
//            Thread.currentThread().interrupt();
        }Step step2=new Step("step2",10);try {step2.process();} catch (InterruptedException e) {LOGGER.info("clean 、backup  or other business ............. ");LOGGER.error("step2 Fail",e);
//            Thread.currentThread().interrupt();
        }}}class Step{private static final Logger LOGGER=LoggerFactory.getLogger(Step.class);private String step;private int costTime;public Step(String step,int costTime) {this.step=step;this.costTime=costTime;}void process() throws InterruptedException{LOGGER.info("Step:{}",this.step);LOGGER.info("Need   {}s",this.costTime);TimeUnit.SECONDS.sleep(this.costTime);LOGGER.info("end ");}
}

Output:

[2015-04-10 01:37:57,634] [main] INFO - tips: task will be cannel ,after 5s
[2015-04-10 01:37:57,634] [do a work] INFO - Step:step1
[2015-04-10 01:37:57,635] [do a work] INFO - Need   20s
[2015-04-10 01:38:02,637] [do a work] INFO - clean 、 backup or other business .............
[2015-04-10 01:38:02,638] [do a work] ERROR - step1 Fail
java.lang.InterruptedException: sleep interruptedat java.lang.Thread.sleep(Native Method)at java.lang.Thread.sleep(Thread.java:340)at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)at thread.Step.process(InterruptedDemo.java:63)at thread.TaskRunner.run(InterruptedDemo.java:30)at java.lang.Thread.run(Thread.java:745)
[2015-04-10 01:38:02,641] [do a work] INFO - Step:step2
[2015-04-10 01:38:02,641] [do a work] INFO - Need   10s
[2015-04-10 01:38:12,641] [do a work] INFO - end 

传递中断状态的场景:
去掉上面代码中Thread.currentThread().interrupt();这句的注释

Output:

[2015-04-10 01:41:32,349] [do a work] INFO - Step:step1
[2015-04-10 01:41:32,350] [do a work] INFO - Need   20s
[2015-04-10 01:41:32,349] [main] INFO - tips: task will be cannel ,after 5s
[2015-04-10 01:41:37,351] [do a work] INFO - clean 、 backup or other business .............
[2015-04-10 01:41:37,352] [do a work] ERROR - step1 Fail
java.lang.InterruptedException: sleep interruptedat java.lang.Thread.sleep(Native Method)at java.lang.Thread.sleep(Thread.java:340)at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)at thread.Step.process(InterruptedDemo.java:63)at thread.TaskRunner.run(InterruptedDemo.java:30)at java.lang.Thread.run(Thread.java:745)
[2015-04-10 01:41:37,355] [do a work] INFO - Step:step2
[2015-04-10 01:41:37,355] [do a work] INFO - Need   10s
[2015-04-10 01:41:37,355] [do a work] INFO - clean 、backup  or other business .............
[2015-04-10 01:41:37,355] [do a work] ERROR - step2 Fail
java.lang.InterruptedException: sleep interruptedat java.lang.Thread.sleep(Native Method)at java.lang.Thread.sleep(Thread.java:340)at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)at thread.Step.process(InterruptedDemo.java:63)at thread.TaskRunner.run(InterruptedDemo.java:39)at java.lang.Thread.run(Thread.java:745)

转载于:https://www.cnblogs.com/softidea/p/4413374.html

需要恢复中断状态的一个场景相关推荐

  1. Java并发编程实战————恢复中断

    中断是一种协作机制,一个线程不能强制其他线程停止正在执行的操作而去执行其他操作. 什么是中断状态? 线程类有一个描述自身是否被中断了的boolean类型的状态,可以通过调用 .isInterrupte ...

  2. 重置线程中断状态_记住要重置线程上下文类加载器

    重置线程中断状态 我很难思考与Java 加载有关的东西,而不是与类加载器有关的东西. 在使用应用程序服务器或OSGi的情况下尤其如此,在这些应用程序服务器或OSGi中,经常使用多个类加载器,并且透明地 ...

  3. android java thread_Android中断并重启一个Thread线程的简单方法

    这里简单的总结下(大概思路,没调试,可能会有错!): MyThread.java pulbic class MyThread implemets Thread{ @overide public voi ...

  4. 小程序篇1-1:搜索框输入关键字、词检索;点击取消恢复默认状态

    当光标点击搜索框输入(后台数据)关键字时,点击输入框后面的×恢复初始状态. 代码如下 wxml: <!-- 搜索框页面 --><view class='search'>< ...

  5. 华南主板bios怎么恢复出厂设置_bios怎么恢复出厂设置 bios恢复出厂状态方法【图文】...

    大家有没有遇到过在打开电脑的时候出现故障导致无法正常启动情况呢?想必大家都有过这样的经历的.导致电脑无法正常引导启动的的原因是BIOS设置不当,BIOS作为电脑启动时的首要读取位置,一旦它发生毛病电脑 ...

  6. Java黑皮书课后题第8章:**8.11(游戏:九个硬币的正反面)一个3*3的矩阵中放置了9个硬币,这些硬币有些面朝上有朝下。1表示正面0表示反面,每个状态使用一个二进制数表示。使用十进制数表示状态

    **8.11(游戏:九个硬币的正反面)一个3*3的矩阵中放置了9个硬币,这些硬币有些面朝上有朝下.1表示正面0表示反面,每个状态使用一个二进制数表示. 题目 题目描述与运行示例 破题:注意对应关系(已 ...

  7. cocos3.2中如何创建一个场景

    1.可以将一些比较通用的东西放到Common.h中,这是一个.h文件,必须手动添加,且保证在classes目录里 #ifndef __COMMON_H__ #define __COMMON_H__#i ...

  8. 中亦科技在创业板IPO恢复审核状态,徐晓飞不再担任执业律师

    2月15日,深交所创业板披露的信息显示,北京中亦安图科技股份有限公司(下称"中亦科技")恢复审核状态.在此之前,该公司曾因发行人会计师信永中和会计师事务所(特殊普通合伙)被中国证监 ...

  9. c语言printf怎么输出马里奥字符画,c++ 用字符画的形式输出超级玛丽中的一个场景...

    超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. ******** ************ ####....#. #..###.....##.... ###.......# ...

最新文章

  1. Apache的管理及优化web
  2. Android 开发杂记
  3. 码农翻身讲计算机基础:并发,同步与信号量
  4. [bzoj3489]A simple rmq problem
  5. iis授权mysql验证_ASP.NET Web API身份验证和授权
  6. MyBatis 流式查询
  7. 一年增加1.2w星,Dapr能否引领云原生中间件的未来?
  8. 用大数据看程序员,让你见到不为人知的一面!
  9. Linux命令速查手册出炉!
  10. R-大数据分析挖掘(4-R爬虫实现)
  11. 网络安全传输(读书笔记)
  12. 使用Sentencepiece +CNN进行文本分类
  13. html中改变图标颜色,使用CSS更改图标的颜色
  14. gmx_MMPBSA.py的安装及使用--只翻译部分内容,具体可参考官方文档(https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/)
  15. 制定项目目标利器SMART原则
  16. 算法:十六进制最大数
  17. 移动端实现图标拖拽效果
  18. 湖北省最新测绘资质审批拟批准结果已公示,看看有没有你们公司
  19. python求和函数详解_python的sum求和函数详解
  20. Android Keep screen on(保持屏幕唤醒)

热门文章

  1. iframe怎么用_怎么样减少无效URL的爬行和索引
  2. Spring学习笔记:3(面向切面AOP)
  3. Java项目:酒店管理系统(java+SSM+jsp+mysql+maven)
  4. 泛型java 代码讲解_Java泛型详解
  5. 周长相等的正方形面积一定相等_必考单元:三年级下册面积计算公式+知识点+测试卷(附答案),重点内容,收藏练习!...
  6. LinkQueue的基本创建
  7. mysql 查看当前事务id,MySQL 如何查询当前最新事务ID
  8. 微信小程序下拉刷新和上拉加载的实现
  9. 理解 CSS 布局和块级格式上下文
  10. 小酌重构系列[8]——提取接口