• 多任务并发处理加快处理效率,比如投资网站首页需要加载新闻头条、理财产品、投资数据等

package com.study.thread;import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.*;public class FutureTest {public static void main(String[] args) throws InterruptedException, ExecutionException {new  FutureTest().exec();}void exec() throws InterruptedException, ExecutionException {//进行异步任务列表List<FutureTask<Integer>> futureTasks = new ArrayList<FutureTask<Integer>>();//线程池 初始化十个线程 和JDBC连接池是一个意思 实现重用ExecutorService executorService = Executors.newFixedThreadPool(10);long start = System.currentTimeMillis();//类似与run方法的实现 Callable是一个接口,在call中手写逻辑代码Callable<Integer> callable = new Callable<Integer>() {@Overridepublic Integer call() throws Exception {Integer res = new Random().nextInt(100);Thread.sleep(1000);System.out.println("任务执行:获取到结果 :"+res);return  res;}};for(int i=0;i<10;i++){//创建一个异步任务FutureTask<Integer> futureTask = new FutureTask<Integer>(callable);futureTasks.add(futureTask);//提交异步任务到线程池,让线程池管理任务 特爽把。//由于是异步并行任务,所以这里并不会阻塞executorService.submit(futureTask);}int count = 0;for (FutureTask<Integer> futureTask : futureTasks) {//futureTask.get() 得到我们想要的结果//该方法有一个重载get(long timeout, TimeUnit unit) 第一个参数为最大等待时间,第二个为时间的单位count+= futureTask.get();}long end = System.currentTimeMillis();System.out.println("线程池的任务全部完成:结果为:"+count+",main线程关闭,进行线程的清理");System.out.println("使用时间:"+(end-start)+"ms");//清理线程池executorService.shutdown();}}

输出:

任务执行:获取到结果 :32
任务执行:获取到结果 :75
任务执行:获取到结果 :92
任务执行:获取到结果 :49
任务执行:获取到结果 :6
任务执行:获取到结果 :75
任务执行:获取到结果 :33
任务执行:获取到结果 :27
任务执行:获取到结果 :20
任务执行:获取到结果 :14
线程池的任务全部完成:结果为:423,main线程关闭,进行线程的清理
使用时间:1004ms
  • 多线程并发处理集合数据

package com.study.thread;import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;public class FutureTest2 {/*** 对数据按照分组大小进行分组** @param groups      需要分组的数据* @param groupNumber 分组大小,默认为100* @return 分组后的数据集合*/public static <T> List<List<T>> groupByNumber(List<T> groups, int groupNumber) {List<List<T>> groupList = new ArrayList<>();List<T> detailList = new ArrayList<>();for (int i = 0; i < groups.size(); i++) {detailList.add(groups.get(i));if (detailList.size() == groupNumber || (i == (groups.size() - 1))) {groupList.add(detailList);detailList = new ArrayList<>();}}return groupList;}public static void main(String[] args) {List<String> aa = new ArrayList<>();for (int i = 0; i < 1000; i++) {aa.add(String.valueOf(new Random().nextInt(100)));}//集合分组List<List<String>> aaList = groupByNumber(aa, 100);ExecutorService executorService = Executors.newFixedThreadPool(10);List<Future<String>> futures = new ArrayList<Future<String>>();for (int i = 0; i < aaList.size(); i++) {final List<String> tlist = aaList.get(i);executorService.execute(new Runnable() {@Overridepublic void run() {for (String s : tlist) {System.out.println(Thread.currentThread().getName() + ":" + s);}}});}}}

输出:

pool-1-thread-2:98
pool-1-thread-1:30
pool-1-thread-1:91
pool-1-thread-1:23
pool-1-thread-1:72
pool-1-thread-1:99
pool-1-thread-3:12
pool-1-thread-3:55
pool-1-thread-3:53
pool-1-thread-3:57
pool-1-thread-3:57
pool-1-thread-2:26
pool-1-thread-2:69
pool-1-thread-2:76
pool-1-thread-2:32
pool-1-thread-2:34
pool-1-thread-2:16
pool-1-thread-2:98
pool-1-thread-2:16
pool-1-thread-2:25
pool-1-thread-2:48
pool-1-thread-2:6
pool-1-thread-2:10
pool-1-thread-2:18

FutureTask多任务并发处理相关推荐

  1. 学习《apache源代码全景分析》之多任务并发处理摘录

    1.如果要写服务器程序,按照正常的思路,通常主程序在进行了必要的准备工作后会调用诸如fork之类的函数产生一个新的进程或线程,然后由子进程进行并发处理.每个进程侦听某个端口,然后接受网络连接,并处理这 ...

  2. 关于Spark中的多任务并发处理(Concurrency)

    文章目录 Spark中的多任务处理 一个顺序作业的例子 一个有缺陷的并发作业的例子 一个优化过的并发作业的例子 参考资料 Spark中的多任务处理 Spark的一个非常常见的用例是并行运行许多作业. ...

  3. shell mysql并发_shell脚本中的多进程并发处理

    在前面的篇章里面,我们已经介绍了常见的各种shell命令操作.然而,在实际工作中,我们经常会遇到多种任务需要在一定时间内都解决掉.如果这些任务是相互独立的,即不存在先后执行关系,那么我们完全可以让它们 ...

  4. Apache学习路线

    参考资料: 1.<Apache源代码全景分析> 2.<鸟哥服务器架设篇> 一.不同的开发人员应该关注的知识点 Apache管理员                配置文件.配置指 ...

  5. 软件架构阅读笔记15

    京东话费充值系统架构演进实践 背景: 话费充值业务线的订单量也'水涨船高 ',同时对系统的各项运行指标要求更高,老的系统架构不足以支撑新的业务量,需要对系统进行升级. 1.应用层面 引入缓存 在应用层 ...

  6. 学习《apache源代码全景分析》之摘录

    一.大纲 1.Web服务器概述 2.Apache体系结构 3.配置文件管理 4.Apache模块化体系结构 5.多任务并发处理 6.网络连接 7.过滤器 8.存储段和存储段组 9.常用过滤器 二.摘录 ...

  7. linux组态文件,嵌入式Linux组态软件实时数据库的设计

    1 引言 实时数据库(real-time database, RTDB)作为组态软件设计与实现的核心内容解决了其所 应对的现代工业生产现场环境中生产数据与控制数据类型复杂多样,数据处理与事件调度时 间 ...

  8. linux开组态软件,基于嵌入式Linux的组态软件实时数据库的设计

    1 引言 实时数据库(real-TIme database, RTDB)作为组态软件设计与实现的核心内容解决了其所 应对的现代工业生产现场环境中生产数据与控制数据类型复杂多样,数据处理与事件调度时 间 ...

  9. 话费充值折扣数据库_《京东话费充值系统架构演进实践》--阅读

    京东话费充值业务线的订单量'水涨船高 ',同时对系统的各项运行指标要求更高,老的系统架构不足以支撑新的业务量,需要对系统进行升级.升级方案从以下几个层面进行. 1.应用层面 引入缓存 在应用层和数据库 ...

最新文章

  1. 走在网页游戏开发的路上(八)
  2. AMD芯片支持oracle数据库,oracle 11gR2 amdu 工具可以直接使用
  3. boost::iterator::permutation_iterator用法的测试程序
  4. [渝粤教育] 江西外语外贸职业学院 商务英语翻译技巧 参考 资料
  5. python零基础能学吗-0基础该不该学习Python?适合学习吗?
  6. 【数组】牛客网:调整数组顺序使奇数位于偶数前面(一)
  7. KitKat带来短信应用的改变
  8. 几近完美的手机电脑无缝共享剪贴板神器,终于被我找到了!
  9. [强网杯 2019]Upload
  10. win7网络不显示共享计算机,win7查找不到网络计算机怎么办_win7看不到网络计算机怎么解决-win7之家...
  11. php的repl是什么,更好的 repl
  12. 2021-5-21-博弈论--金刚狼与小狗灰
  13. 正常计算机的c盘空间多大,往往C盘剩余空间多少为宜
  14. Java学习历程——JVM的JMM模型
  15. 记一次android任务栈页面跳转问题
  16. 结构体中元素引用—— “.“ 与 “->“
  17. TR069协议向导——一个帮助你了解TR069协议的简明教程(一)
  18. 2021年计算机视觉工程师学习路线
  19. Python案例-网络编程-socket入门-serverclient
  20. 如何统计Android的代码行数

热门文章

  1. 开源网络库Alamofire的安装及简单使用
  2. 直升飞机java游戏_java飞机游戏
  3. pyautogui键盘无效
  4. 哈哈学车:教练包产到户,学员分期付款的时代来了
  5. 如何学习使用 Axure?
  6. rownum使用方法
  7. 前端React教程第五课 深入React-Hook工作机制
  8. web前端主要技术概述
  9. Linux下C语言开发(信号signal处理机制)
  10. 知云翻译划线后无法翻译怎么办。如何加载百度翻译API