`
m635674608
  • 浏览: 5028222 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

可中断线程

    博客分类:
  • java
 
阅读更多
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);
	}
}
分享到:
评论

相关推荐

    jthread:连接和协作可中断线程的C ++类(应变为std

    带有stop_token helper-的加入和协作可中断线程(std :: jthread)的C ++类 参考实施 测试套件 提出用于C ++标准的论文 主要建议) (有关停止回调的初始建议,已与p0660r7合并) 其他次要更新) 主要作者:...

    C++11 线程的中断,继续以及停止

    C++11关于thead的应用,利用std::condition std::mutex提供如何中断,停止和继续功能,

    linux的中断线程化实现[借鉴].pdf

    在Linux操作系统中,中断线程化是一种将中断处理与用户空间任务解耦合的技术,它允许中断处理程序在后台执行,从而改善系统响应时间和资源管理。2.6.25.8内核版本引入了这一特性,使得中断处理更加灵活且高效。 ...

    Java 实例 - 中断线程源代码+详细指导教程.zip

    在Java编程中,中断线程是一项重要的任务,它允许程序在必要的时候停止或者结束一个正在运行的线程。本教程的压缩包包含了中断线程的源代码实例和详细指导,旨在帮助开发者深入理解和掌握这一核心概念。以下是关于...

    java中断线程的正确姿势完整示例.rar

    在Java编程中,中断线程是一项重要的任务,特别是在多线程环境下,我们可能需要停止某个线程的执行,以优化程序资源的使用或响应特定的系统需求。本示例将详细探讨Java中断线程的正确方法,以确保线程安全且高效地...

    CPU中断——实现多线程机制

    ### CPU中断——实现多线程机制 #### 一、引言 在计算机系统中,多线程机制是一种常见的技术手段,用于提高程序的执行效率和响应能力。它允许在一个进程中同时运行多个线程,每个线程都可以独立地执行任务。为了...

    JAVA多线程设计模式详解

    10. 可中断线程模式:线程在执行过程中可以被其他线程中断,例如通过Thread.interrupt()方法。 11. 信号量模式:Semaphore类提供了一种控制同时访问特定资源的线程数量的方法,用于限流或同步。 12. 计数器模式:用...

    09.多线程编程基础-停止线程-使用interrupt方法中断线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    多线程学习

    6. **线程的中断和异常**:通过调用interrupt()方法可中断线程,线程在检查中断标志时会抛出InterruptedException。 7. **线程池**:Executor框架提供线程池服务,如ThreadPoolExecutor,它可以有效地管理线程,...

    Java基本功之中断线程的理解[参考].pdf

    以下是对Java中断线程的详细解释: 1. **线程终止条件**: - 当`run`方法执行完毕。 - `return`语句执行,提前结束`run`方法。 - 出现未捕获的异常,导致`run`方法终止。 2. **`stop`方法的弃用**: Java早期...

    Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

    在Linux系统中,栈可以分为进程栈、线程栈、内核栈以及中断栈。 首先,我们需要了解栈(Stack)的基本概念。栈是一种后进先出(LIFO, Last In First Out)的数据结构,它允许数据被存储和检索,但只允许在一段称为...

    Java多线程之中断线程(Interrupt)的使用详解

    `Thread.interrupt()`方法是中断线程的主要手段,但它的行为并不像字面意义上那样直接终止线程。相反,它通过设置线程的中断状态来向线程发送一个中断信号,这个信号是一个内部标志,告知线程应该停止其当前的工作。...

    Java并发编程示例(三):线程中断

    Java并发编程中的线程中断是一个关键机制,它允许开发者在程序运行过程中显式地请求某个线程停止执行。在本示例中,我们创建了一个名为`PrimeGenerator`的线程,该线程会不断地查找并打印质数。线程中断机制的使用...

    java通过线程控制程序执行超时(新)

    // 超时后中断线程 } ``` 基本数据类型在超时控制中主要体现在计算或比较操作上,例如,我们可以用long类型的变量记录开始时间,然后在超时检查时与当前时间进行比较。反射则允许我们在运行时动态获取类、方法和...

    多线程之间的线程通信

    6. **原子操作(Atomic Operation)**:这是在多线程环境中执行不会被中断的操作,例如自增或自减,以确保数据一致性。 然而,多线程通信也存在潜在的危险。其中最常见的问题是**竞态条件(Race Condition)**,即多个...

    JAVA100例之实例66 实现对线程的控制,中断、挂起、恢复、停止

    线程控制是Java多线程编程中的重要概念,包括中断、挂起、恢复和停止。本实例将深入探讨这些主题,帮助你更好地理解和掌握Java中线程的高级操作。 1. **线程中断**: Java通过`Thread.interrupt()`方法提供线程...

    java多线程Demo

    - interrupt()方法用于中断线程,如果线程正在阻塞(如sleep或wait),会被中断并抛出InterruptedException。 通过这些技术,我们可以构建高效、稳定、响应迅速的多线程应用程序。在实际开发中,应根据具体需求...

    研讨会 硬件中断 IDLE线程设计PPT学习教案.pptx

    IDLE线程是操作系统为处理无任务可执行情况而创建的一个特殊线程。当所有其他任务都处于等待状态或已执行完毕时,CPU会运行IDLE线程,以防止资源的浪费。IDLE线程的主要任务是保持CPU的运转,例如进行节能操作。 3...

    Android中断线程的处理方法

    中断线程的处理是确保应用响应性和用户体验的关键。本篇将详细讲解如何在Android中正确地中断线程,以及处理中断后的工作。 首先,Android中的线程中断主要是通过`Thread.interrupted()`或`Thread.currentThread()....

    大漠多线程模板_大漠_大漠多线程_

    6. **异常处理**:多线程环境下的异常处理需要特别注意,因为一个线程的异常可能会中断其他线程。大漠的模板可能包含了优雅的异常处理机制,确保线程异常不会导致整个程序崩溃。 7. **线程间通信**:`WaitHandle`类...

Global site tag (gtag.js) - Google Analytics