Java常用线程池-固定线程池使用

  • 固定线程池

固定线程池

在执行数据处理时不可避免的需要使用多线程进行数据处理,以此提高数据处理效率,降低处理时间。而线城池现在池容器对数据处理效率提升有举足轻重的作用,一般我们会在实际应用中使用固定线程池。

package com.base.service;import com.base.service.common.loghub.LogHubAdapter;
import com.base.service.common.loghub.LogHubFactoryAdapter;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.LoggerFactory;import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;/*** Description** @Author: xuxin* @Date: 2020/4/30 18:25* @Version 1.0*/
public class FixedThreadPoolTest {/*** 自定义线程池*/private  final  static ExecutorService EXECUTOR = Executors.newFixedThreadPool(12);/*** log工具*/private final static LogHubAdapter loghub  = LogHubFactoryAdapter.getLoghubAdapter(this.getClass(), LoggerFactory.getLogger(this.getClass()));public static void main(String[] args) {List<String> list= Lists.newArrayList();list.add("1");list.add("2");list.add("3");list.add("4");list.add("5");Object lock=new Object();try {if (CollectionUtils.isNotEmpty(list) && list.size()>0){/*** 1、CountDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行* 2、它是通过一个计数器实现,计数器的初始值是线程的数量。每当一个线程执行完毕后,*   计数器的值就-1,当计数器值为0时,表示所有线程都执行完毕,*    然后再闭锁上等待的线程就可以恢复工作了。*/CountDownLatch countDownLatch=new CountDownLatch(list.size());list.forEach(s->{EXECUTOR .execute(()->{try {//逻辑操作。在并发编程中存在线程安全问题。主要原因:1、存在共享数据 2、多线程共同操作共享数据。//synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或者代码块//同时synchronized可以保证一个线程变化可见性,可以代替volatilesynchronized (lock){loghub.info(s);}}catch (Exception e){loghub.error("查询错误",e);}finally {//正常执行或者异常都要-1countDownLatch.countDown();}});});try {//等待12s,只不过等待一定时间后count值还没变为0的话就会继续执行countDownLatch.await(12, TimeUnit.SECONDS);}catch (Exception e){loghub.error("请求超时",e);}}}catch (Exception e){loghub.error("报错",e);}}}

Java常用线程池-固定线程池使用相关推荐

  1. java常用的几种线程池

    1. 为什么使用线程池 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协 ...

  2. java常用的几种线程池比较

    1. 为什么使用线程池 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协 ...

  3. java 资源锁_concurrent包 线程池、资源封锁和队列、ReentrantReadWriteLock介绍

    jdk1.5后,提供了java.util.concurrent包,它可以实现线程池,你把线程当成普通对象就可以了,它来负责调度和执行 包括两类线程池 固定线程池 可变线程池 延迟线程池 固定线程池 p ...

  4. java 内存池_内存池技术介绍(图文并茂,非常清楚)

    看到一篇关于内存池技术的介绍文章,受益匪浅,转贴至此. 6.1 自定义内存池性能优化的原理 如前所述,读者已经了解到"堆"和"栈"的区别.而在编程实践中,不可避 ...

  5. Java中常用的四种线程池

    在Java中使用线程池,可以用ThreadPoolExecutor的构造函数直接创建出线程池实例,在Executors类中,为我们提供了常用线程池的创建方法. ​ 接下来我们就来了解常用的四种: ne ...

  6. Java常用四大线程池用法以及ThreadPoolExecutor详解

    2019独角兽企业重金招聘Python工程师标准>>> 为什么用线程池? 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率 2.线程并发数量过多 ...

  7. Java多线程学习八:线程池常用的阻塞队列

    线程池内部结构 线程池的内部结构主要由四部分组成,如图所示. 第一部分是线程池管理器,它主要负责管理线程池的创建.销毁.添加任务等管理操作,它是整个线程池的管家. 第二部分是工作线程,也就是图中的线程 ...

  8. Java高并发编程:线程池

    这里首先介绍了java5中的并发的小工具包:java.util.concurrent.atomic,然后介绍了线程池的概念,对使用java5的方式创建不同形式的线程进行了演示,之后介绍了两个 对象:C ...

  9. java线程池和线程实例化_浅谈Java 线程池原理及使用方式

    一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...

最新文章

  1. 计算机书籍-Exploring Cloud Computing免费电子书
  2. mysql是逻辑库吗_mycat是一种比较简单的中间件产品,可以帮助mysql进行分库,同时统一在一个逻辑库。硬件环境:系统:centos 7.6数据库版本:5.7.19mycat:...
  3. Spring系列:父子容器详解
  4. 2 华为云闪付_教你区分信用卡刷卡、挥卡、插卡、云闪付等支付方式!
  5. C++函数和类的封装
  6. JAVA数组——二分查找
  7. CAD中 OLE不能旋转_工作常备的天正CAD技巧都在这里啦(附教程)
  8. HTML表格(HTML 表格的使用,收藏这一篇就够了)
  9. Context.getDir
  10. exoplay切换全屏_如何使用rotation-degrees手动旋转(rotate)exoplayer2播放器
  11. thinkphp5拼接数组查询条件
  12. 用c语言做一个栈,完成逆波兰表达式
  13. IllustratorCS5初学者必读(7):透明度调板
  14. java猜拳_Java猜拳小游戏(剪刀、石头、布)
  15. K8S教程(7)使用探针对容器进行健康检查
  16. Revit相关问题:符号线,转转问题,生成三维视图
  17. 【VHDL语言学习笔记(二)】 4位向量加法器
  18. ubuntu如何卸载软件
  19. IO 扩展(串转并)-74HC595-16*16LED点阵实验
  20. 和菜头:放开那些员工

热门文章

  1. 果然,B站也开始油腻了!
  2. XMind思维导图软件和常用快捷键
  3. (兔C残篇)Java 面向对象的三个基本特征:继承,Super关键字的使用,this关键字的使用,super和this的区别,方法重写
  4. Android 获取IP与mac地址
  5. bt4的U盘安装方法
  6. 科学大家谈 | 哥伦比亚大学生物科学系主任童亮访谈录
  7. 新世代潮流酒店Cook’s Club品牌在中国正式发布
  8. js函数判断服务器文件是否为空,Js 判断数组是否为空或是否含有某个值
  9. Java静态绑定动态绑定
  10. WPF一个完整的GIF制作工具实例(Part3:生成GIF)