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方法中去,作为方法的具体实例,这样就可以实现高效的异步任务。

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

相关文章推荐

Java 多线程实现的三种方法,附两个线程执行不同的输出

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没...

Java多线程交替执行任务

一:问题描述          生活中很多事情都是有顺序的交互进行着,比如100个人去做地铁,安检的只负责安;只有安检通过了,才能排队刷卡进站;进站了,在对应线路站下排队才能进站。这就是一个典型的多任...

JAVA多线程实现的三种方式

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没...

使用Java多线程实现任务分发

多线程下载由来已久,如 FlashGet、NetAnts 等工具,它们都是依懒于 HTTP 协议的支持(Range 字段指定请求内容范围),首先能读取出请求内容 (即欲下载的文件) 的大小,划分...

Spring异步任务处理,@Async的配置和使用

这个注解用于标注某个方法或某个类里面的所有方法都是需要异步处理的。被注解的方法被调用的时候,会在新线程中执行,而调用它的方法会在原来的线程中执行。这样可以避免阻塞、以及保证任务的实时性。适用于处理lo...

java的后台任务调度@Schedule和@Async

Java提供了两种后台任务的方法 调度任务;@Schedule 异步任务;@Async 当然,使用这两个是有条件的,需要在spring应用的上下文中声明 当然,如果我们是基于java配置的,需要...

FutureTask——-Java中异步任务类的详细说明

直接看下面的实验,注释详细: package com.tbc.java; import java.util.ArrayList; import java.util.Date; im...

Java中的多线程你只要看这一篇就够了

引 如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来...

java 启动线程三种方式

1.继承Thread public class java_thread extends Thread{ public static void main(String args[]) { (n...

Java异步调用-多线程实现

异步调用,当请求延时或超时状态下,为了更高效率执行任务,对任务进行异步操作。 此处使用java多线程来实现异步调用,当方法执行时,使用新的线程来执行指定方法。 这里写代码片
  • zqbx7
  • zqbx7
  • 2016-11-03 11:27
  • 3092
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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