Java 通过主线程实现子线程的超时控制
来源:互联网 发布:股指期货 知乎 编辑:程序博客网 时间:2024/05/10 18:13
package com.bill99.seashell.fsp.quartz.test;
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;
/**
* 启动一个任务,然后等待任务的计算结果,如果等待时间超出预设定的超时时间,则中止任务。
*
*/
public class TaskTimeoutDemo {
public static void main(String[] args) {
System.out.println("Start ...");
ExecutorService exec = Executors.newCachedThreadPool();
// testTask(exec, 15); // 任务成功结束后等待计算结果,不需要等到15秒
testTask(exec, 1); // 只等待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;
}
}
- Java 通过主线程实现子线程的超时控制
- Java实现主线程等待子线程
- Java实现主线程等待子线程
- Java实现主线程等待子线程
- java线程 超时控制的实现
- Java线程超时控制的实现
- Java线程超时控制的实现
- interface 回调函数--实现子线程类对主线程类界面的控制
- winform主线程外面的子线程中实现控制界面
- 主线程和子线程的同步控制
- 主线程和子线程的同步控制
- 主线程 和子线程的同步控制
- 主线程 如何控制 子线程
- Java 超时线程控制实现
- Thread.join()--Java实现主线程等待子线程
- 主线程和子线程之间的交互的实现
- Java主线程与子线程的通信
- java主线程唤醒子线程的疑问
- Android 分享功能
- 开发板与虚拟机的NFS搭建
- JobWall
- 虚拟机安装Solaris10
- RFC2617-HTTP Authentication: Basic and Digest Access Authentication
- Java 通过主线程实现子线程的超时控制
- T_SQL : to execute local .sql file
- Android开发环境配置图文教程(jdk+eclipse+sdk)
- 导入导出Excel
- [转帖]Spring事务,传播行为类型PROPAGATION_REQUIRED
- android显示gif动态图的方法
- javascript中使用setTimeout以不定时执行操作
- struts2 struts.xml配置中常见配置选项及说明
- C#.NET Split 的几种使用方法