java异步执行任务,结合多线程线程池

原创 2017年01月03日 12:59:41

使用线程池结合异步处理完成一些需要立即返回结果,但计算量又相对比较大的计算任务,可以考虑使用这种异步任务,这边主要是利用java自身的Timer 任务调度中的异步操作,然后结合上线程池Executors.newCachedThreadPool进行使用。我这边主要示例一个不需要返回计算或者执行结果的任务,如果大家需要获取执行结果,可以考虑使用futureTask进行执行完堵塞式回调。这边我就不多讲futureTask这块,这边有个连接FutureTask使用案例大家可以自己学习下

那么Timer又是怎么执行异步任务的呢?

Timer timer = new Timer();
timer.schedule(new TimerTask(){
	@Override
	public void run() {
		List<String> allProvices = headCityMapper.getAllProvices();
		if(CollectionUtils.isNotEmpty(allProvices)){
			try {
				long startTime = System.currentTimeMillis();
				ExecutorService executorService = Executors.newCachedThreadPool();
				for(String currentProvice:allProvices){
					executorService.submit(()->{udProvinceCache(currentProvice);});
				}
				long endTime = System.currentTimeMillis();
				log.info(" 耗时(毫秒): {}" + (endTime-startTime));
			}catch (Exception e) {
				log.error("失败");
			}
		}
	}
}, 1);
如例中所示:1、schedule传入的第一个参数是一个TimerTask匿名类,第二个参数是延迟1毫秒。

2、多线程池ExecutorService executorService = Executors.newCachedThreadPool();新建一个线程池来处理任务;

3、"()->udProvinceCache(currentProvice)"这里面就是你具体要执行的任务,它其实是一个@functionalIterface接口话方法,支持这种函数调用的方式。会自动将你的任务注入到Runnable的run方法中去,作为方法的具体实例,这样就可以实现高效的异步任务。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Quartz2.2.1在JAVA中的简单用法 (二)

先前在上一篇博客中介绍了Quartz2.2.1在JAVA中的简单用法,但是只是单个任务的创建,而实际应用中有的时候会有多个任务需要执行,这里简单介绍一下多个任务的创建,也算是上一篇博客的一个小小的补充...

Quartz2.2.1在JAVA中的简单用法(一)

由于项目中需要用到定时执行任务,后来查资料发现有Quartz这么一个任务调度框架,但是网上的大部分资料几乎都是之前的版本,Quartz-2.2.1好像经过了改版,与先前的版本在用法上有那么一些出入,2...

多线程线程池控制一个方法的并发量 限制只有5个线程执行任务

方法1: public class ThreadPoolTest { /** * 信息量 */ private static Semaphore semaphore = ne...

Java多线程线程池(2)--ThreadPoolExecutor

线程池之ThreadPoolExecutor

java多线程线程池的原理与实现

简单介绍      创建线程有两种方式:继承Thread或实现Runnable。Thread实现了Runnable接口,提供了一个空的run()方法,所以不论是继承Thread还是实现Runna...

Java 7之多线程线程池 - Callable和Future

Callable接口代表一段可以调用并返回结果的代码;Future接口表示异步任务,是还没有完成的任务给出的未来结果。所以说Callable用于产生结果,Future用于获取结果。     ...

Java多线程线程池(1)--基本概述

多线程系列之线程池基本概述

多线程异步编程(2):创建多个线程执行任务,同时更新进度条,使用观察者模式,利用事件通知界面更新。移除对Form的引用,彻底解除界面与逻辑的耦合

效果图 1.创建线程参数类和事件参数类 public class ThreadParam     {         public int threadType;         pub...

Java 多线程线程池 - 线程池原理

最近在看java并发方面的一点知识,看了几个博客好蛮好的,收集一下: java并发可以看看这个infoq上的资料本篇博客转自这里:第一部分来看一下线程池的框架图,如下: 1、Executor任务提...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java异步执行任务,结合多线程线程池
举报原因:
原因补充:

(最多只允许输入30个字)