java 线程池newFixedThreadPool
工作中遇到一个这样的情况,List中的元素要每个遍历出来,然后作为参数传给后面通过spark做数据处理,元素太多,一个一个的遍历速度太慢,于是考虑使用多线程,代码如下:(已删除部分代码)
想了解更多线程池的内容,可以参考链接:https://blog.csdn.net/aa1215018028/article/details/82814192
package com.kong.test.UDF; import java.util.ArrayList; import java.util.Iterator; 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; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; import com.kong.test.constant.Constants; public class CallableAndFuture { public static void main(String[] args) throws InterruptedException, ExecutionException { SparkSession spark = SparkSession .builder() .appName("CalibrationTest") .master("local") .enableHiveSupport() .getOrCreate(); spark.sparkContext().setLogLevel("ERROR"); spark.sparkContext().setLocalProperty("spark.scheduler.pool", "production"); CalibrationSQL cali = new CalibrationSQL(db,branchE,date,date4g,branchC); Dataset<Row> sqlDF1 = spark.sql(cali.getAllCell()); List<Row> list = sqlDF1.collectAsList(); int threadNum = 10; ExecutorService threadPool = Executors.newFixedThreadPool(threadNum); List<Future<Integer>> futures = new ArrayList<Future<Integer>>(); System.out.println("线程数目:"+threadNum); for (int i = 0; i < list.size(); i++) { String[] line = list.get(i).toString().replace('[', ' ').replace(']', ' ').trim().split(","); String antenna_0 = line[0]; String antenna0_googlegri = line[1]; String antenna0_googlegci = line[2]; futures.add(threadPool.submit(new calibration(cali,antenna_0,antenna0_googlegri,antenna0_googlegci,spark))); } for (int i = 0; i < futures.size(); i++) { System.out.println(futures.get(i).get()); } threadPool.shutdown();System.out.println("threadPool shutdown !"); } } class calibration implements Callable<Integer> { private CalibrationSQL cali; private String antenna_0; private String antenna0_googlegri; private String antenna0_googlegci; private SparkSession spark; public calibration(CalibrationSQL cali,String antenna_0,String antenna0_googlegri,String antenna0_googlegci,SparkSession spark) { this.cali = cali; this.antenna_0 = antenna_0; this.antenna0_googlegri = antenna0_googlegri; this.antenna0_googlegci = antenna0_googlegci; this.spark = spark; } public Integer call() throws Exception { --处理逻辑-- return 0; } }
对每个线程的执行状态加上回调流程,会一直阻塞直至多线程部分全部处理完成。这样不会影响后面的代码处理
java 线程池newFixedThreadPool的更多相关文章
- java 线程池 ---- newFixedThreadPool()
class MyThread implements Runnable{ private int index; public MyThread(int index){ this.index = inde ...
- (CSDN迁移) JAVA多线程实现-可控最大并发数线程池(newFixedThreadPool)
上篇文章中介绍了单线程化线程池newSingleThreadExecutor,可控最大并发数线程池(newFixedThreadPool)与其最大的区别是可以通知执行多个线程,可以简单的将newSin ...
- 一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结
一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结 这是一个十分严重的线上问题 自从最近的某年某月某天起,线上服务开始变得不那么稳定(软病).在高峰期,时常有几台机器的 ...
- java 线程池ThreadPoolExecutor 如何与 AsyncTask() 组合使用。
转载请声明出处谢谢!http://www.cnblogs.com/linguanh/ 这里主要使用Executors中的4种静态创建线程池实例方法中的 newFixedThreadPool()来举例讲 ...
- Java线程池使用说明
Java线程池使用说明 转自:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极 ...
- (转载)JAVA线程池管理
平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...
- Java线程池的那些事
熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor.大家可能了解到它的原理,甚至看过它的源码:但 ...
- 四种Java线程池用法解析
本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...
- Java线程池应用
Executors工具类用于创建Java线程池和定时器. newFixedThreadPool:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程.在任意点,在大多数 nThread ...
随机推荐
- MyBatis if标签的用法
<!-- 4.1.1 在WHERE条件中使用if 需求: 实现一个用户管理高级查询功能,根据输入的条件去检索用户信息.这个功能 还需要支持以下三种情况:当只有输入用户名时,需要根据用户名进行模糊 ...
- MyBatis从入门到精通(十三):使用discriminator鉴别器映射
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解鉴别器映射discri ...
- exe崩溃用windbgattach后有宝贵现场,可看程序退出线程等,千万不要清屏
exe崩溃用windbgattach后有宝贵现场,可看程序退出线程等,千万不要清屏
- HHyperledger Fabric 之 TLS (fabric-java-sdk)使用grpcs方式访问fabric
我在很多fabric的技术群中,很多使用javasdk连接fabric的同友,初始的时候很多都没有成功的使用TLS进行区块链交易: 是sdk不支持,还是我们没有找到解决方案? 其实不然,我这里使用的是 ...
- nginx文件名逻辑漏洞_CVE-2013-4547漏洞复现
nginx文件名逻辑漏洞_CVE-2013-4547漏洞复现 一.漏洞描述 这个漏洞其实和代码执行没有太大的关系,主要原因是错误地解析了请求的URL,错误地获取到用户请求的文件名,导致出现权限绕过.代 ...
- Linux小火车和流星雨
一.流星雨 [root@localhost ~]# wget https://jaist.dl.sourceforge.net/project/cmatrix/cmatrix/1.2a/cmatrix ...
- Intellij IDEA 打开文件tab数量限制的调整
最近在阅读一个开源项目,发现IDEA对同时打开的文件TAB有限制,最多只能打开10个文件Tab,再多开就会把原来的Tab关闭了. 找了半天,在菜单中找到了调整方法,以Mac为例,调整路径为 “Inte ...
- Linux基础之定时任务
30.1)什么是定时任务 定时任务命令是cond,crond就是计划任务,类似于我们平时生活中的闹钟,定点执行. 30.2)为什么要用crond 计划任务主要是做一些周期性的任务,比如凌晨3点定时备份 ...
- [学习笔记] MySQL入门
一.MySQL的安装与简单使用 ubuntu16.04下安装MySQL: sudo apt-get update sudo apt-get install mysql-server mysql-cli ...
- HTTP_2_HTTP协议概要
http协议概要 HTTP 通信对象 通信方式 通信状态 定位资源 节省通信量 超文本传输协议 客户端与服务器端 请求和响应 不保存状态(借助cookie) 请求URI keep-alive/pipe ...