应用场景,比如你有个业务模块,非常耗时,并且还需要重复调用5次。

如果你写个for循环调用5次,调用一次3秒,那么5次就15秒,不是很友好。

这时,如果你用线程池就方便了,多线程跑,都跑完,收集到结果,也就是一个任务的时间。

Demo:

package com.tech.jin.thread;

import java.util.ArrayList;
import java.util.List;
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; public class TestThread { public void test(){
int threadCount = 5;//创建线程数 ExecutorService executorService = Executors.newFixedThreadPool(threadCount); List<Future> list = new ArrayList<Future>(); long time1 = System.currentTimeMillis(); for(int i=0;i<threadCount;i++){
//如果你有一个任务调用接口
Callable c = new testCallable(i,time1);
Future f = executorService.submit(c);//这里也可以submit(Thread或Runnable) list.add(f);
} for(Future f :list){
try {
long time3 = (Long)f.get();
System.out.println(time3);
} catch (InterruptedException e) {
} catch (ExecutionException e) {
e.printStackTrace();
}
} } public static void main(String[] args) {
TestThread t = new TestThread();
t.test();
} } class testCallable implements Callable{
private int i;
private long time1; public testCallable(int i,long time1) {
this.i = i;
this.time1 = time1;
} @Override
public Object call() throws Exception {
Thread.sleep(5000-(i*1000));
long time2 = System.currentTimeMillis(); long time3 = time2-time1; System.out.println(i+"------"+time3); return time3;
} }

我们故意让前边的sleep时间长点,让后边的先执行。

结果:

4------1006
3------2006
2------3006
1------4005
0------5004
5004
4005
3006
2006
1006

跑完发现List<Future> list中存放的顺序还是按照原顺序来的,所以不用担心顺序问题。

java提供的线程池的使用的更多相关文章

  1. Java四种线程池的学习与总结

    在Java开发中,有时遇到多线程的开发时,直接使用Thread操作,对程序的性能和维护上都是一个问题,使用Java提供的线程池来操作可以很好的解决问题. 一.new Thread的弊端 执行一个异步任 ...

  2. java并发包&线程池原理分析&锁的深度化

          java并发包&线程池原理分析&锁的深度化 并发包 同步容器类 Vector与ArrayList区别 1.ArrayList是最常用的List实现类,内部是通过数组实现的, ...

  3. Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

    介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...

  4. Java四种线程池

    Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 时间:20 ...

  5. java并发:线程池、饱和策略、定制、扩展

    一.序言 当我们需要使用线程的时候,我们可以新建一个线程,然后显式调用线程的start()方法,这样实现起来非常简便,但在某些场景下存在缺陷:如果需要同时执行多个任务(即并发的线程数量很多),频繁地创 ...

  6. Java多线程和线程池

    转自:http://blog.csdn.net/u013142781/article/details/51387749 1.为什么要使用线程池 在Java中,如果每个请求到达就创建一个新线程,开销是相 ...

  7. Java多线程之线程池详解

    前言 在认识线程池之前,我们需要使用线程就去创建一个线程,但是我们会发现有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因 ...

  8. java多线程、线程池及Spring配置线程池详解

    1.java中为什么要使用多线程使用多线程,可以把一些大任务分解成多个小任务来执行,多个小任务之间互不影像,同时进行,这样,充分利用了cpu资源.2.java中简单的实现多线程的方式 继承Thread ...

  9. (转载)new Thread的弊端及Java四种线程池的使用

    介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new ...

随机推荐

  1. pro*c的使用

    一.什么是Pro*c程序 在oracle数据库管理系统中,有三种访问数据库的方法:       1.用 SQL*Plus,直接输入sql命令以命令行交换的方式访问数据库       2.用一些应用开发 ...

  2. js函数定义的三种方式

    1.函数声明语法 function sum(num1, num2){ return num1 + num2; } 2.函数表达式定义 var sum = function (num1, num2){ ...

  3. gerrit上的commit msg中关联jira单号(含gerrit的安装)

    这个问题折腾了很久,前期后后大概一个月吧,终于搞定了,查了很多资料,有的不完整,有的完全就不能用,有的没说完整,所以一定要记录下来,我的心血啊. 由于公司在用的gerrit的是正式环境中的,大家都在使 ...

  4. Fiddler 手机抓包设置

    IOS 为例 1. Fiddler -> Tools -> Options ->Connection 2. 手机 Settings -> WIFI ->设置当前连接的网络 ...

  5. phpstudy安装redis

    php安装扩展,首先要在php官网下载相应的库文件, http://pecl.php.net/package/redis 下载相应版本的文件,首先phpinfo()看看当前的php环境版本等等   我 ...

  6. windows go dll 框架

    乘着还没有添加商业功能之前,先给大家把福利分享了 希望有需要的朋友能够用的上 这个框架是在用windows平台,GO做的http/https服务,调用dll现有的库接口实现特定功能的大框架 //dll ...

  7. python获取当前,昨天,明天时间

    import datetime nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#现在 pastTimeMinutes = ...

  8. vue中定时器的使用方式

    就这么搞定 no no no  离开页面的时候还必须清楚定时器

  9. (已解决)Xcode 换电脑提示 Could not attach to pid:“XXXX”错误

    在运行项目时出现了如下错误 (基本上重新启动项目即可) 紧接着再次运行又没有问题了. 稍微查询了一下得知,这个问题并不是由我们的操作引起的,有时就会莫名其妙的出现,但是有一些不同的情况 下面列出如何解 ...

  10. C Alyona and Spreadsheet Codeforces Round #401(Div. 2)(思维)

    Alyona and Spreadsheet 这就是一道思维的题,谈不上算法什么的,但我当时就是不会,直到别人告诉了我,我才懂了的.唉 为什么总是这么弱呢? [题目链接]Alyona and Spre ...