0 0

请教个问题,java在后台跑的线程如何控制他的超时时间,超过一段时间自动停止?10


请教个问题,java在后台跑的线程如何控制他的超时时间,超过一段时间自动停止?
2013年3月22日 10:14

3个答案 按时间排序 按投票排序

0 0

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * 启动一个任务,然后等待任务的计算结果,如果等待时间超出预设定的超时时间,则中止任务。
 * 
 * @author Chen Feng
 */
public class TaskTimeoutDemo {

	public static void main(String[] args) {
		System.out.println("Start ...");

		ExecutorService exec = Executors.newCachedThreadPool();
		
		testTask(exec, 15); // 任务成功结束后等待计算结果,不需要等到15秒
		testTask(exec, 5); // 只等待5秒,任务还没结束,所以将任务中止

		exec.shutdown();
		System.out.println("End!");
	}

	public static void testTask(ExecutorService exec, int timeout) {
		MyTask task = new MyTask();
		Future<Boolean> future = exec.submit(task);
		Boolean taskResult = null;
		String failReason = null;
		try {
			// 等待计算结果,最长等待timeout秒,timeout秒后中止任务
			taskResult = future.get(timeout, TimeUnit.SECONDS);
		} catch (InterruptedException e) {
			failReason = "主线程在等待计算结果时被中断!";
		} catch (ExecutionException e) {
			failReason = "主线程等待计算结果,但计算抛出异常!";
		} catch (TimeoutException e) {
			failReason = "主线程等待计算结果超时,因此中断任务线程!";
			exec.shutdownNow();
		}

		System.out.println("\ntaskResult : " + taskResult);
		System.out.println("failReason : " + failReason);
	}
}

class MyTask implements Callable<Boolean> {

	@Override
	public Boolean call() throws Exception {
		// 总计耗时约10秒
		for (int i = 0; i < 100L; i++) {
			Thread.sleep(100); // 睡眠0.1秒
			System.out.print('-');
		}
		return Boolean.TRUE;
	}
}

2013年4月02日 13:08
0 0

采用JDK5+ 中的API实现很简单,而且安全。

这是我刚刚特地发的一篇博客,里面写了一个简单的例子:
控制Java线程超时后中止的方案
http://yunzhu.iteye.com/blog/1838617

2013年3月29日 12:20
0 0

可以参考下这个帖子。
http://www.iteye.com/topic/375868

2013年3月22日 14:56

相关推荐

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

    在Java编程中,控制程序执行超时是一项重要的任务,特别是在多线程环境下,我们可能需要确保某个任务不会无限制地运行下去,导致资源耗尽。本文将深入探讨如何使用Java的线程机制来实现程序执行的超时控制,同时也会...

    Java线程超时监控

    在Java编程中,多线程是并发执行任务的重要方式,然而在实际应用中,我们可能会遇到某些线程执行时间过长或死锁的情况,这可能导致系统资源的浪费甚至整体性能下降。因此,对线程进行超时监控是必要的,以确保程序的...

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

    例如,我们可能需要在超时时停止一个正在执行的长时间方法,这可以通过反射获取该方法的`Method`对象,并调用`invoke()`方法来实现。 总结来说,Java通过线程和定时器可以有效地控制程序执行超时,结合反射可以在...

    Java多线程示例之线程控制

    在读写操作中,通常会用到`ReentrantLock`(可重入锁)配合`Condition`来实现对共享资源的精确控制,确保在特定时刻只有一个线程进行读或写操作,从而避免数据不一致。 线程控制的实践不仅关乎性能,还直接影响程序...

    BlockingQueue队列自定义超时时间取消线程池任务

    在Java编程中,`BlockingQueue`是一个非常重要的并发工具类,它主要用于线程间的数据通信。`newFixedThreadPool`是`java.util.concurrent`包中的一个线程池工厂方法,用于创建固定数量线程的线程池。`FutureTask`则...

    Java线程超时控制的实现.docx

    `Thread`类提供了一个`join`方法,可以通过传递一个时间参数来等待线程结束或超时。这种方法主要用于在外部管理线程的超时情况。 ##### 1. 实现原理 - **外部管理类**:调用目标线程的`join`方法,并传递一个超时...

    线程超时死掉

    解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...

    java多线程控制的赛跑程序

    这个“java多线程控制的赛跑程序”是一个示例,展示了如何利用多线程来模拟一场赛跑比赛。在这个程序中,每个参赛者(线程)都有自己的运行逻辑,通过线程的并发执行来模拟实际的赛跑过程。接下来,我们将深入探讨...

    Java中实现线程的超时中断方法实例

    概述:在 Java 中实现线程的超时中断是非常重要的,特别是在熔断降级组件中。熔断降级组件需要在指定的超时时间内中断请求线程,以避免请求长时间阻塞系统资源。在这篇文章中,我们将介绍如何在 Java 中实现线程的...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    线程关闭javacv关闭20190508.rar

    在JavaCV中,我们可能需要创建多个线程来处理不同的任务,比如一个线程负责捕获摄像头的视频流,另一个线程则负责将这些流推送到远程服务器。`Thead2.java`文件可能就是实现此类多线程操作的示例代码。 在`...

    java经典多线程面试题

    - 线程互斥(Mutual Exclusion)是指多个线程在同一时刻只有一个能进入临界区(Critical Section),也就是访问共享资源的那段代码。 4. synchronized关键字的用法有哪些? - 在方法上使用,对当前对象实例进行...

    java多线程经典案例

    synchronized用于方法或代码块,可以保证同一时间只有一个线程执行特定代码,避免数据冲突。Lock接口提供更细粒度的锁控制,支持公平锁、非公平锁、读写锁等,提高并发性能。 线程通信是线程间交换信息的过程,主要...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    java 线程池源代码

    3. `newCachedThreadPool()`: 创建一个可缓存的线程池,当线程空闲超过60秒,线程会自动终止,适合处理大量短生命周期的任务。 4. `newScheduledThreadPool(int corePoolSize)`: 创建一个定长的线程池,支持定时及...

    Java多线程编程线程的协同、停止、暂停、继续等操作实现

    在Java编程中,多线程是并发处理任务的关键技术,它允许程序同时执行多个不同的任务。本篇文章将深入探讨如何实现线程的协同、停止、暂停以及继续等操作,这些都是多线程编程中的核心概念。 1. **线程的协同(协作...

    java多线程查询数据库

    综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。

    java 多线程并发实例

    - 同步:确保同一时间只有一个线程访问共享资源,防止数据不一致。Java提供了synchronized关键字以及Lock接口(如ReentrantLock)来实现同步。 - volatile:修饰变量,确保多线程环境下的可见性和有序性,但不保证...

    安全的编写多线程的_Java_应用程序

    - **同步代码块**: 使用`synchronized`关键字声明同步代码块,确保同一时间只有一个线程执行。 - **同步方法**: 在方法声明前加上`synchronized`关键字,使整个方法成为同步方法。 - **示例**: 对于一个共享资源...

    Java多线程调用BlockingDeque跑批量数据的例子

    一个线程从A表读数据放入队列 N个线程从队列中取出数据,找到其在子表中的数据 对子表中的数据开3种线程:读,发email,标记状态 N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送...

Global site tag (gtag.js) - Google Analytics