java线程池的一些简单功能,后续会更新,代码不多,很好理解

  1. package com.rbac.thread;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.concurrent.BlockingQueue;
  6. import java.util.concurrent.LinkedBlockingDeque;
  7. import java.util.concurrent.TimeUnit;
  8.  
  9. /**
  10. * 自定义线程池
  11. *
  12. * @author xl,lang
  13. *
  14. */
  15. public class MyExecutorService {
  16. // 初始化线程
  17. protected List<InitThread> initThreads;
  18.  
  19. // 执行任务列表
  20. protected BlockingQueue<Runnable> taskQueues;
  21.  
  22. // 线程执行状态
  23. protected volatile boolean threadState = true;
  24.  
  25. /*
  26. * // 当前线程的活跃数 public AtomicInteger activeCount; public Lock lock=new
  27. * ReentrantLock(); // 最小活跃数 public int threadMinSize = 0; // 最大线程数 public
  28. * int threadMaxSize = 0; // 初始话线程数 public int threadInitSize = 0;
  29. */
  30.  
  31. /**
  32. * 线程初始化方法
  33. *
  34. * @param threadMaxSize
  35. * @param threadInitSize
  36. * @param taskQueueSize
  37. */
  38. /*
  39. * public MyExecutorService(int threadMaxSize, int threadMinSize, int
  40. * threadInitSize, int taskQueueSize) { this.taskQueues = new
  41. * LinkedBlockingDeque<Runnable>(taskQueueSize); if (threadInitSize > 0 &&
  42. * threadInitSize < threadMaxSize) { this.initThreads = new ArrayList<>();
  43. * for (int i = 0; i < threadInitSize; i++) { InitThread init = new
  44. * InitThread(); init.start(); initThreads.add(init); }
  45. *
  46. * }
  47. *
  48. * }
  49. */
  50.  
  51. /**
  52. * 线程初始化方法
  53. *
  54. * @param threadMaxSize
  55. * @param threadInitSize
  56. * @param taskQueueSize
  57. */
  58. public MyExecutorService(int threadInitSize, int taskQueueSize) {
  59. this.taskQueues = new LinkedBlockingDeque<Runnable>(taskQueueSize);
  60. if (threadInitSize > 0) {
  61. this.initThreads = new ArrayList<>();
  62. for (int i = 0; i < threadInitSize; i++) {
  63. InitThread init = new InitThread();
  64. init.start();
  65. initThreads.add(init);
  66. }
  67.  
  68. }
  69.  
  70. }
  71.  
  72. // 添加任务
  73. public boolean exeute(Runnable task) throws InterruptedException {
  74.  
  75. return this.taskQueues.offer(task, 60, TimeUnit.SECONDS);
  76. }
  77.  
  78. /**
  79. * 初始化线程
  80. *
  81. * @author xl,lang
  82. *
  83. */
  84. class InitThread extends Thread {
  85.  
  86. @Override
  87. public void run() {
  88.  
  89. while (threadState || taskQueues.size() > 0) {
  90. Runnable runable = taskQueues.poll();
  91. if (null != runable) {
  92. runable.run();
  93. }
  94.  
  95. }
  96.  
  97. }
  98.  
  99. }
  100.  
  101. // 关闭线程池
  102. public void shutdown() {
  103. this.threadState = false;
  104. }
  105.  
  106. public static void main(String[] args) {
  107.  
  108. MyExecutorService es = new MyExecutorService(2, 5);
  109. for (int i = 0; i < 100; i++) {
  110. final int a = i;
  111. try {
  112. es.exeute(new Runnable() {
  113.  
  114. @Override
  115. public void run() {
  116. System.out.println(Thread.currentThread().getName() + "执行" + a);
  117.  
  118. }
  119. });
  120. } catch (InterruptedException e) {
  121. // TODO Auto-generated catch block
  122. e.printStackTrace();
  123. }
  124. }
  125. es.shutdown();
  126.  
  127. }
  128. }

java如何自定义一个线程池的更多相关文章

  1. 二 Java利用等待/通知机制实现一个线程池

    接着上一篇博客的 一Java线程的等待/通知模型 ,没有看过的建议先看一下.下面我们用等待通知机制来实现一个线程池 线程的任务就以打印一行文本来模拟耗时的任务.主要代码如下: 1  定义一个任务的接口 ...

  2. 死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  3. 死磕 java线程系列之自己动手写一个线程池(续)

    (手机横屏看源码更方便) 问题 (1)自己动手写的线程池如何支持带返回值的任务呢? (2)如果任务执行的过程中抛出异常了该怎么处理呢? 简介 上一章我们自己动手写了一个线程池,但是它是不支持带返回值的 ...

  4. Java多线程-新特性-线程池

    Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定可靠的多线程程序 ...

  5. java多线程之 Executors线程池管理

    1. 类 Executors 此类中提供的一些方法有: 1.1 public static ExecutorService newCachedThreadPool() 创建一个可根据需要创建新线程的线 ...

  6. [转] 引用 Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用

    PS: Spring ThreadPoolTaskExecutor vs Java Executorservice cachedthreadpool 引用 [轰隆隆] 的 Java自带的线程池Thre ...

  7. java 线程之executors线程池

    一.线程池的作用 平时的业务中,如果要使用多线程,那么我们会在业务开始前创建线程,业务结束后,销毁线程.但是对于业务来说,线程的创建和销毁是与业务本身无关的,只关心线程所执行的任务.因此希望把尽可能多 ...

  8. java高并发之线程池

    Java高并发之线程池详解   线程池优势 在业务场景中, 如果一个对象创建销毁开销比较大, 那么此时建议池化对象进行管理. 例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对 ...

  9. Java并发编程:线程池ThreadPoolExecutor

    多线程的程序的确能发挥多核处理器的性能.虽然与进程相比,线程轻量化了很多,但是其创建和关闭同样需要花费时间.而且线程多了以后,也会抢占内存资源.如果不对线程加以管理的话,是一个非常大的隐患.而线程池的 ...

随机推荐

  1. 手摸手教你在vue-cli里面使用vuex,以及vuex简介

    写在前面: 这篇文章是在vue-cli里面使用vuex的一个极简demo,附带一些vuex的简单介绍.有需要的朋友可以做一下参考,喜欢的可以点波赞,或者关注一下,希望可以帮到大家. 本文首发于我的个人 ...

  2. Flex布局做出自适应页面--语法和案例

    本文发布在: github项目地址:https://github.com/tenadolanter/flex-layout-demo SegmentFault地址:https://segmentfau ...

  3. 小程序自定义switch组件

    如上图,小程序api中的switch组件只能自定义颜色,不能自定义宽高,所以就开始了自己写switch组件. 自定义组件样式 switch组件样式大致如图,样式思路:未选中时为一个长方形有圆角按钮,和 ...

  4. Ansible-安装配置

    主机规划 主机名称 操作系统版本 内网IP 外网IP(模拟) 安装软件 ansi-manager CentOS7.5 172.16.1.180 10.0.0.180 ansible ansi-hapr ...

  5. 微信WXSS样式文件

    目录 WXSS官方文档 1. WXSS 1.1. 尺寸单位 1.2. 样式导入 1.3. 内联样式 1.4. 选择器 1.5. 全局样式与局部样式 WXSS官方文档 https://developer ...

  6. java线程间的共享

    本次内容主要讲synchronized.volatile和ThreadLocal. 1.synchronized内置锁 线程开始运行,拥有自己的栈空间,就如同一个脚本一样,按照既定的代码一步一步地执行 ...

  7. 2018-05-04 圣杯布局 and 双飞翼布局,display:flex

    看到一个神奇的布局,啥都不说了 直接贴代码 要让main在中间,left在左边,可以通过Flex容器下的项目的属性“order”属性来设置:对于order属性:定义项目的排列顺序,越小越靠前,默认为0 ...

  8. 使用NPOI将Excel表导入到数据库中

    public string ExcelFile() { //指定文件路径, string fileName=@"d:\Stu.xls"; //创建一个文件流,并指定其中属性 usi ...

  9. 10个机器学习人工智能开发框架和AI库(优缺点对比表)/贪心学院

    概述 通过本文我们来一起看一些用于人工智能的高质量AI库,它们的优点和缺点,以及它们的一些特点. 人工智能(AI)已经存在很长时间了.然而,由于这一领域的巨大进步,近年来它已成为一个流行语.人工智能曾 ...

  10. vue项目 github 上传项目并链接地址

    git init git init: 通过命令git init把这个文件夹变成Git可管理的仓库git status git status:查看当前仓库状态 git add . 这里提示你虽然把项目粘 ...