工作中遇到一个这样的情况,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的更多相关文章

  1. java 线程池 ---- newFixedThreadPool()

    class MyThread implements Runnable{ private int index; public MyThread(int index){ this.index = inde ...

  2. (CSDN迁移) JAVA多线程实现-可控最大并发数线程池(newFixedThreadPool)

    上篇文章中介绍了单线程化线程池newSingleThreadExecutor,可控最大并发数线程池(newFixedThreadPool)与其最大的区别是可以通知执行多个线程,可以简单的将newSin ...

  3. 一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结

    一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结 这是一个十分严重的线上问题 自从最近的某年某月某天起,线上服务开始变得不那么稳定(软病).在高峰期,时常有几台机器的 ...

  4. java 线程池ThreadPoolExecutor 如何与 AsyncTask() 组合使用。

    转载请声明出处谢谢!http://www.cnblogs.com/linguanh/ 这里主要使用Executors中的4种静态创建线程池实例方法中的 newFixedThreadPool()来举例讲 ...

  5. Java线程池使用说明

    Java线程池使用说明 转自:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极 ...

  6. (转载)JAVA线程池管理

    平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...

  7. Java线程池的那些事

    熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor.大家可能了解到它的原理,甚至看过它的源码:但 ...

  8. 四种Java线程池用法解析

    本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...

  9. Java线程池应用

    Executors工具类用于创建Java线程池和定时器. newFixedThreadPool:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程.在任意点,在大多数 nThread ...

随机推荐

  1. 解决jenkins 发送邮件图片乱码问题

    1.在本地mac上测试邮件发送正常 发送邮件内容图片没有乱码 2.公司测试服务器是一台windows2008的系统jmeter + ant  jenkins 安装完成后 设置邮件发送格式模板,设置附件 ...

  2. c++小游戏——俄罗斯方块

    #include<cstdio> #include<windows.h> #include<ctime> int a[24][17],i,j,tim=800,ti= ...

  3. 实验吧--web--天下武功唯快不破

    ---恢复内容开始--- 英文翻译过来嘛,就是:天下武功无快不破嘛.(出题者还是挺切题的) 看看前端源码: 注意这里 please post what you find with parameter: ...

  4. android在style中使用自定义属性 error: style attribute not found.

    异常: Error:(128, 5) error: style attribute 'com.honghui0531.prebiotics.view:attr/item_right_icon_src' ...

  5. 关于页面scroolTop的获取

    scroolTop 发现问题 获取页面滚动高度的时候: 当html页面设置了DTD<!DOCTYPE html> document.body.scroolTop // 值总是为0: doc ...

  6. luogu题解 P5022 【旅行】

    本人的代码可以说洛谷最简单的了 我的存图方式有些与众不同 a[5000][5000]中第一个下标表示第几个点,第二个表示与点相连的点 虽然比前向星废内存但时间极快,大概是O(n)的. 现在步入正题 6 ...

  7. DedeCms常用内容调用标签实例大全

    一.调用顶级栏目标签 <a href="{dede:global.cfg_cmsurl/}/" class="ahov">首页</a> ...

  8. 0 ElasticSearch

    注意事项 需要jdk环境1.7以上 Elasticsearch Kibana 的下载地址统一为https://www.elastic.co/downloads/ 问题排查可以登录https://dis ...

  9. MapReduce 运行全过程解析

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 前言 前面我们讲了 MapReduce 的编程模型,我们知道他主要分成两大阶段来完成一项任务,一是 m ...

  10. python虚拟环境完美部署

    一.前言 预处理 建议仔细看完本文章之后在进行操作,避免失误,本环境可以用于生产环境,有利于生产环境python之间的环境隔离,互相不会产生环境冲突:pyenv和pyenv-virtualenv可以完 ...