多线程之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 ...
随机推荐
- 【原创】大叔问题定位分享(9)oozie提交spark任务报 java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/KafkaProducer
oozie中支持很多的action类型,比如spark.hive,对应的标签为: <spark xmlns="uri:oozie:spark-action:0.1"> ...
- shell入门(二):()、(())、[]、[[]]、{}
1.() 命令组. 括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号’;’隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ...
- mysql的配置说明
查询最高内存占用 使用以下命令可以知道mysql的配置使用多少 RAM SELECT ( @@key_buffer_size + @@query_cache_size + @@innodb_buffe ...
- OpenSSL 提取 pfx 数字证书公钥与私钥
由于之前生产环境已经使用了 Identityserver4 用来做授权与认证的服务,而新项目采用 Spring Cloud 微服务体系,一方面 Spring Cloud 官方暂时只支持 OAuth2. ...
- Ubuntu系统查看显卡型号和NVIDIA驱动版本
查看GPU型号 lspci | grep -i nvidia 查看NVIDIA驱动版本 sudo dpkg --list | grep nvidia-*
- scrapy 通过FormRequest模拟登录再继续
1.参考 https://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider.start_requests 自动提交 ...
- SQL反模式学习笔记11 限定列的有效值
目标:限定列的有效值,将一列的有效字段值约束在一个固定的集合中.类似于数据字典. 反模式:在列定义上指定可选值 1. 对某一列定义一个检查约束项,这个约束不允许往列中插入或者更新任何会导致约束失败的值 ...
- 命令行神器 Click 简明笔记
Click 是用 Python 写的一个第三方模块,用于快速创建命令行.我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argpa ...
- 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结
20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...
- ExpandableListView
ExpandableListView 1.界面 Item_Group_layout 就一个TextView <?xml version="1.0" encoding=&quo ...