3个答案 按时间排序 按投票排序
-
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
-
采用JDK5+ 中的API实现很简单,而且安全。
这是我刚刚特地发的一篇博客,里面写了一个简单的例子:
控制Java线程超时后中止的方案
http://yunzhu.iteye.com/blog/1838617
2013年3月29日 12:20
相关推荐
在Java编程中,控制程序执行超时是一项重要的任务,特别是在多线程环境下,我们可能需要确保某个任务不会无限制地运行下去,导致资源耗尽。本文将深入探讨如何使用Java的线程机制来实现程序执行的超时控制,同时也会...
在Java编程中,多线程是并发执行任务的重要方式,然而在实际应用中,我们可能会遇到某些线程执行时间过长或死锁的情况,这可能导致系统资源的浪费甚至整体性能下降。因此,对线程进行超时监控是必要的,以确保程序的...
例如,我们可能需要在超时时停止一个正在执行的长时间方法,这可以通过反射获取该方法的`Method`对象,并调用`invoke()`方法来实现。 总结来说,Java通过线程和定时器可以有效地控制程序执行超时,结合反射可以在...
在读写操作中,通常会用到`ReentrantLock`(可重入锁)配合`Condition`来实现对共享资源的精确控制,确保在特定时刻只有一个线程进行读或写操作,从而避免数据不一致。 线程控制的实践不仅关乎性能,还直接影响程序...
在Java编程中,`BlockingQueue`是一个非常重要的并发工具类,它主要用于线程间的数据通信。`newFixedThreadPool`是`java.util.concurrent`包中的一个线程池工厂方法,用于创建固定数量线程的线程池。`FutureTask`则...
`Thread`类提供了一个`join`方法,可以通过传递一个时间参数来等待线程结束或超时。这种方法主要用于在外部管理线程的超时情况。 ##### 1. 实现原理 - **外部管理类**:调用目标线程的`join`方法,并传递一个超时...
解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...
这个“java多线程控制的赛跑程序”是一个示例,展示了如何利用多线程来模拟一场赛跑比赛。在这个程序中,每个参赛者(线程)都有自己的运行逻辑,通过线程的并发执行来模拟实际的赛跑过程。接下来,我们将深入探讨...
概述:在 Java 中实现线程的超时中断是非常重要的,特别是在熔断降级组件中。熔断降级组件需要在指定的超时时间内中断请求线程,以避免请求长时间阻塞系统资源。在这篇文章中,我们将介绍如何在 Java 中实现线程的...
Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...
在JavaCV中,我们可能需要创建多个线程来处理不同的任务,比如一个线程负责捕获摄像头的视频流,另一个线程则负责将这些流推送到远程服务器。`Thead2.java`文件可能就是实现此类多线程操作的示例代码。 在`...
- 线程互斥(Mutual Exclusion)是指多个线程在同一时刻只有一个能进入临界区(Critical Section),也就是访问共享资源的那段代码。 4. synchronized关键字的用法有哪些? - 在方法上使用,对当前对象实例进行...
synchronized用于方法或代码块,可以保证同一时间只有一个线程执行特定代码,避免数据冲突。Lock接口提供更细粒度的锁控制,支持公平锁、非公平锁、读写锁等,提高并发性能。 线程通信是线程间交换信息的过程,主要...
Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...
3. `newCachedThreadPool()`: 创建一个可缓存的线程池,当线程空闲超过60秒,线程会自动终止,适合处理大量短生命周期的任务。 4. `newScheduledThreadPool(int corePoolSize)`: 创建一个定长的线程池,支持定时及...
在Java编程中,多线程是并发处理任务的关键技术,它允许程序同时执行多个不同的任务。本篇文章将深入探讨如何实现线程的协同、停止、暂停以及继续等操作,这些都是多线程编程中的核心概念。 1. **线程的协同(协作...
综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。
- 同步:确保同一时间只有一个线程访问共享资源,防止数据不一致。Java提供了synchronized关键字以及Lock接口(如ReentrantLock)来实现同步。 - volatile:修饰变量,确保多线程环境下的可见性和有序性,但不保证...
- **同步代码块**: 使用`synchronized`关键字声明同步代码块,确保同一时间只有一个线程执行。 - **同步方法**: 在方法声明前加上`synchronized`关键字,使整个方法成为同步方法。 - **示例**: 对于一个共享资源...
一个线程从A表读数据放入队列 N个线程从队列中取出数据,找到其在子表中的数据 对子表中的数据开3种线程:读,发email,标记状态 N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送...