package misty.thread.interruptable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
public class InterruptableThreadTest {
public static class Task implements Runnable {
@Override
public void run() {
try {
while (!Thread.currentThread().isInterrupted()) {
// Thread.interrupted()也可以检查中断状态是否被设置,但是它同时会清除中断状态。而isInterrupted不会。
// 处理业务逻辑
System.out.println("业务逻辑必须是可异步中断的");
// 例如sleep就是可异步中断的
TimeUnit.SECONDS.sleep(1);
}
} catch (InterruptedException e) {
// 捕获InterruptedException会清除中断状态
// 如果这个任务是在线程池中执行的,那么应该将中断状态置回
Thread.currentThread().interrupt();
}
// 线程结束
System.out.println("我的使命完成了");
}
}
/**
* @param args
* @throws InterruptedException
* @throws ExecutionException
*/
public static void main(String[] args) throws InterruptedException,
ExecutionException {
// 方法1
Thread t = new Thread(new Task());
t.start();
TimeUnit.SECONDS.sleep(5);
t.interrupt();
t.join();
// 方法2
ExecutorService exec = Executors.newCachedThreadPool();
Future<?> future = exec.submit(new Task());
TimeUnit.SECONDS.sleep(5);
future.cancel(true);
// 方法3
FutureTask<?> futureTask = new FutureTask<Void>(new Task(), null);
exec.execute(futureTask);
TimeUnit.SECONDS.sleep(5);
futureTask.cancel(true);
// 其实无论是哪种,本质上都是Thread#interrupt
exec.shutdown();
exec.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
}
}
- 浏览: 5028222 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
发表评论
-
Kryo 使用指南
2017-12-05 20:14 20071、Kryo 的简介 Kryo 是一个快速序列化/ ... -
spring session序列化问题排查
2017-12-01 19:07 6264严重: Servlet.service() for ser ... -
利用junit对springMVC的Controller进行测试
2017-11-30 16:26 1440平时对junit测试service/D ... -
Java内存模型之重排序
2017-11-29 09:44 858在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重 ... -
pmd spotbugs 文档
2017-11-28 10:02 0https://pmd.github.io/pmd/pmd ... -
PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?
2017-11-28 10:01 2142可以说都是代码静态分析工具,但侧重点不同。pmd:基于源代码 ... -
阿里巴巴Java代码规约插件p3c-pmd使用指南与实现解析
2017-11-23 17:09 1602阿里巴巴Java代码规约插件安装 阿里Java代码规 ... -
静态分析工具PMD使用说明 (文章来源: Java Eye)
2017-11-23 17:07 1140质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤 ... -
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2836本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Spring+MyBatis实现数据库读写分离方案
2017-11-20 17:15 1075百度关键词:spring mybatis 多数据源 读写分离 ... -
数据库连接池druid wallfilter配置
2017-11-20 11:38 1335使用缺省配置的WallFilter <be ... -
java restful 实体封装
2017-11-16 09:47 1588package com.mogoroom.bs.commo ... -
dak
2017-11-15 11:21 0package zzm; import jodd.ht ... -
Java内存模型之从JMM角度分析DCL
2017-11-15 09:35 635DCL,即Double Check Lock,中卫双重检查锁 ... -
Java 打印堆栈的几种方法
2017-11-14 09:36 4741java 中可以通过 eclipse 等工具直接打印堆栈, ... -
Servlet Session学习
2017-11-10 09:25 548HTTP 是一种"无状 ... -
浅析Cookie中的Path与domain
2017-11-10 09:26 1056Path – 路径。指定与co ... -
入分析volatile的实现原理
2017-11-08 09:47 682通过前面一章我们了解了synchronized是一个重量级的 ... -
Spring MVC-ContextLoaderListener和DispatcherServlet
2017-11-15 09:35 681Tomcat或Jetty作为Servlet ... -
搭建spring框架的时候,web.xml中的spring相关配置,可以不用配置ContextLoaderListener(即只配DispatcherServl
2017-11-07 18:27 1431搭建spring框架的时候,web.xml中的sprin ...
相关推荐
带有stop_token helper-的加入和协作可中断线程(std :: jthread)的C ++类 参考实施 测试套件 提出用于C ++标准的论文 主要建议) (有关停止回调的初始建议,已与p0660r7合并) 其他次要更新) 主要作者:...
C++11关于thead的应用,利用std::condition std::mutex提供如何中断,停止和继续功能,
在Linux操作系统中,中断线程化是一种将中断处理与用户空间任务解耦合的技术,它允许中断处理程序在后台执行,从而改善系统响应时间和资源管理。2.6.25.8内核版本引入了这一特性,使得中断处理更加灵活且高效。 ...
在Java编程中,中断线程是一项重要的任务,它允许程序在必要的时候停止或者结束一个正在运行的线程。本教程的压缩包包含了中断线程的源代码实例和详细指导,旨在帮助开发者深入理解和掌握这一核心概念。以下是关于...
在Java编程中,中断线程是一项重要的任务,特别是在多线程环境下,我们可能需要停止某个线程的执行,以优化程序资源的使用或响应特定的系统需求。本示例将详细探讨Java中断线程的正确方法,以确保线程安全且高效地...
### CPU中断——实现多线程机制 #### 一、引言 在计算机系统中,多线程机制是一种常见的技术手段,用于提高程序的执行效率和响应能力。它允许在一个进程中同时运行多个线程,每个线程都可以独立地执行任务。为了...
10. 可中断线程模式:线程在执行过程中可以被其他线程中断,例如通过Thread.interrupt()方法。 11. 信号量模式:Semaphore类提供了一种控制同时访问特定资源的线程数量的方法,用于限流或同步。 12. 计数器模式:用...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
6. **线程的中断和异常**:通过调用interrupt()方法可中断线程,线程在检查中断标志时会抛出InterruptedException。 7. **线程池**:Executor框架提供线程池服务,如ThreadPoolExecutor,它可以有效地管理线程,...
以下是对Java中断线程的详细解释: 1. **线程终止条件**: - 当`run`方法执行完毕。 - `return`语句执行,提前结束`run`方法。 - 出现未捕获的异常,导致`run`方法终止。 2. **`stop`方法的弃用**: Java早期...
在Linux系统中,栈可以分为进程栈、线程栈、内核栈以及中断栈。 首先,我们需要了解栈(Stack)的基本概念。栈是一种后进先出(LIFO, Last In First Out)的数据结构,它允许数据被存储和检索,但只允许在一段称为...
`Thread.interrupt()`方法是中断线程的主要手段,但它的行为并不像字面意义上那样直接终止线程。相反,它通过设置线程的中断状态来向线程发送一个中断信号,这个信号是一个内部标志,告知线程应该停止其当前的工作。...
Java并发编程中的线程中断是一个关键机制,它允许开发者在程序运行过程中显式地请求某个线程停止执行。在本示例中,我们创建了一个名为`PrimeGenerator`的线程,该线程会不断地查找并打印质数。线程中断机制的使用...
// 超时后中断线程 } ``` 基本数据类型在超时控制中主要体现在计算或比较操作上,例如,我们可以用long类型的变量记录开始时间,然后在超时检查时与当前时间进行比较。反射则允许我们在运行时动态获取类、方法和...
6. **原子操作(Atomic Operation)**:这是在多线程环境中执行不会被中断的操作,例如自增或自减,以确保数据一致性。 然而,多线程通信也存在潜在的危险。其中最常见的问题是**竞态条件(Race Condition)**,即多个...
线程控制是Java多线程编程中的重要概念,包括中断、挂起、恢复和停止。本实例将深入探讨这些主题,帮助你更好地理解和掌握Java中线程的高级操作。 1. **线程中断**: Java通过`Thread.interrupt()`方法提供线程...
- interrupt()方法用于中断线程,如果线程正在阻塞(如sleep或wait),会被中断并抛出InterruptedException。 通过这些技术,我们可以构建高效、稳定、响应迅速的多线程应用程序。在实际开发中,应根据具体需求...
IDLE线程是操作系统为处理无任务可执行情况而创建的一个特殊线程。当所有其他任务都处于等待状态或已执行完毕时,CPU会运行IDLE线程,以防止资源的浪费。IDLE线程的主要任务是保持CPU的运转,例如进行节能操作。 3...
中断线程的处理是确保应用响应性和用户体验的关键。本篇将详细讲解如何在Android中正确地中断线程,以及处理中断后的工作。 首先,Android中的线程中断主要是通过`Thread.interrupted()`或`Thread.currentThread()....
6. **异常处理**:多线程环境下的异常处理需要特别注意,因为一个线程的异常可能会中断其他线程。大漠的模板可能包含了优雅的异常处理机制,确保线程异常不会导致整个程序崩溃。 7. **线程间通信**:`WaitHandle`类...