多线程之Executors基本使用
Executors几种创建方式
https://www.cnblogs.com/yasong/p/9318522.html
线程池数如何设置
https://blog.csdn.net/u013276277/article/details/82630336
https://www.cnblogs.com/cherish010/p/8334952.html
示例
- 实现Runnable方式
public class WorkThread implements Runnable{ private String mobile = ""; private Integer num; @Override public void run() { String reqData = mobile; try { System.out.println(Thread.currentThread().getName()+"线程"+"["+num+"]request data :"+reqData); String respStr = accessScoreService(reqData); } catch (Exception e) { System.out.println(e.getMessage()); } } /** * 具体业务处理逻辑 * * @param reqData * @return */ private String accessScoreService(String reqData) { return Thread.currentThread().getName()+"线程执行任务"; } public WorkThread(String _mobile,Integer num){ this.mobile = _mobile; this.num=num; } public WorkThread(){ } }
测试:
/** * 测试多线程 */ @Test public void testExecutors(){ List<String> mobList=new ArrayList<>(); for(int i=10;i<100;i++){ String tel="186544444"+i; mobList.add(tel); } Integer tps=10; ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10); int sleepTime = 1000 / tps; for(Integer i=0,size=mobList.size();i<size;i++){ String mob=mobList.get(i); fixedThreadPool.execute(new WorkThread(mob, i)); /*try { Thread.sleep(sleepTime); } catch (InterruptedException e) { e.printStackTrace(); }*/ } System.out.println("线程初始化完成"); }
- 实现Callable方式
public class WorkForCallable implements Callable<String> { private String mobile; @Override public String call() throws Exception { System.out.println("************开始执行"+"["+Thread.currentThread().getName()+"]"+"线程=======处理任务:"+mobile); return "["+Thread.currentThread().getName()+"]"+"线程处理成功"; } public WorkForCallable(String mobile){ this.mobile=mobile; } public WorkForCallable(){ } }
测试:
@Test public void testExecutors1() throws InterruptedException, ExecutionException { List<String> mobList=new ArrayList<>(); for(int i=10;i<100;i++){ String tel="186544444"+i; mobList.add(tel); } List<FutureTask<String>> futureTaskList = new ArrayList<FutureTask<String>>(); ExecutorService excutorService = Executors.newFixedThreadPool(10); for(int a=0;a<mobList.size();a++){ String str=mobList.get(a); FutureTask<String> futureTask = new FutureTask<String>(new WorkForCallable(str)); // futureTaskList.add(futureTask); excutorService.submit(futureTask); String s = futureTask.get(); System.out.println("************完成结果"+s+"手机号:"+str); } }
学习链接
https://blog.csdn.net/m0_37825799/article/details/79088596
https://www.cnblogs.com/zengyuanjun/p/8094610.html
https://blog.csdn.net/majunzhu/article/details/83013780
https://blog.csdn.net/qq_32725403/article/details/79488068
多线程之Executors基本使用的更多相关文章
- java 线程之executors线程池
一.线程池的作用 平时的业务中,如果要使用多线程,那么我们会在业务开始前创建线程,业务结束后,销毁线程.但是对于业务来说,线程的创建和销毁是与业务本身无关的,只关心线程所执行的任务.因此希望把尽可能多 ...
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
- JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止
JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止 背景 当单线程的程序发生一个未捕获的异常时我们可以采用try....catch进行异常的捕获,但是在多线程环境 ...
- iOS多线程之8.NSOPeration的其他用法
本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...
- python 线程之 threading(四)
python 线程之 threading(三) http://www.cnblogs.com/someoneHan/p/6213100.html中对Event做了简单的介绍. 但是如果线程打算一遍一遍 ...
- python 线程之 threading(三)
python 线程之 threading(一)http://www.cnblogs.com/someoneHan/p/6204640.html python 线程之 threading(二)http: ...
- python 线程之_thread
python 线程之_thread _thread module: 基本用法: def child(tid): print("hello from child",tid) _thr ...
- Java多线程之ConcurrentSkipListMap深入分析(转)
Java多线程之ConcurrentSkipListMap深入分析 一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下, ...
- 【C#】线程之Parallel
在一些常见的编程情形中,使用任务也许能提升性能.为了简化变成,静态类System.Threading.Tasks.Parallel封装了这些常见的情形,它内部使用Task对象. Parallel.Fo ...
随机推荐
- nginx——location匹配流程图
location匹配流程图 location理解 1.收到url请求后,nginx首先进行精确匹配(有“=”的为精确匹配),如果匹配成功,则直接返回精确匹配结果,如果没有命中则会继续向下进行普通匹配 ...
- P2947 [USACO09MAR]向右看齐Look Up--单调栈
单调栈真的很好用呢! P2947 [USACO09MAR]向右看齐Look Up 题目描述 Farmer John's N (1 <= N <= 100,000) cows, conven ...
- js的逆向解析
过程: 知道如何寻找登录的接口 知道如何确定js的位置 知道如何观察js的执行过程 知道js的执行方法 1. 确定网站的登录的接口登录的form表单中action对应的url地址通过抓包可以发现,在这 ...
- css_base_note
- 平衡树简单教程及模板(splay, 替罪羊树, 非旋treap)
原文链接https://www.cnblogs.com/zhouzhendong/p/Balanced-Binary-Tree.html 注意是简单教程,不是入门教程. splay 1. 旋转: 假设 ...
- Linux下IPC中的信号量PV操作
代码如下所示,两边对照查看程序!(左图为先运行进程 右图为后运行进程) 运行的效果就是:当左边的进程检测到EOF,释放资源V操作之后,右边的进程会迅速的执行对应的printf的操作! 所有代码文 ...
- 15,EasyNetQ-高级API
EasyNetQ的使命是为基于RabbitMQ的消息传递提供最简单的API. 核心IBus接口有意避免公开AMQP概念,如交换,绑定和队列,而是实现基于消息类型的默认交换绑定队列拓扑. 对于某些场景, ...
- 【Codeforces】【网络流】【线段树】【扫描线】Oleg and chess (CodeForces - 793G)
题意: 给定一个n*n的矩阵,一个格子上可以放一个车.其中有q个子矩阵,且q个子矩阵互不相交或者是重叠(但边界可以衔接).这q个子矩阵所覆盖的地方都是不能够放车的.车可以越过子矩阵覆盖的地方进行攻击( ...
- Chapter 2 Basic Elements of JAVA
elaborate:详细说明 Data TypesJava categorizes data into different types, and only certain operationscan ...
- # Do—Now——团队冲刺博客_总结篇
Do-Now--团队冲刺博客_总结篇 目录 博客链接 作者 1. 第一篇(领航篇) @仇夏 2. 第二篇 @侯泽洋 3. 第三篇 @仇夏 4. 第四篇 @周亚杰 5. 第五篇 @唐才铭 6. 第六篇 ...