package com.leon.demo01;import java.util.Collections;
import java.util.LinkedList;
import java.util.List;/*这是自定义的线程池类;成员变量:1:任务队列   集合  需要控制线程安全问题2:当前线程数量3:核心线程数量4:最大线程数量5:任务队列的长度成员方法1:提交任务;将任务添加到集合中,需要判断是否超出了任务总长度2:执行任务;判断当前线程的数量,决定创建核心线程还是非核心线程*/
public class MyThreadPool {// 1:任务队列   集合  需要控制线程安全问题private List<Runnable> tasks = Collections.synchronizedList(new LinkedList<>());//2:当前线程数量private int num;//3:核心线程数量private int corePoolSize;//4:最大线程数量private int maxSize;//5:任务队列的长度private int workSize;public MyThreadPool(int corePoolSize, int maxSize, int workSize) {this.corePoolSize = corePoolSize;this.maxSize = maxSize;this.workSize = workSize;}//1:提交任务;public void submit(Runnable r){//判断当前集合中任务的数量,是否超出了最大任务数量if(tasks.size()>=workSize){System.out.println("任务:"+r+"被丢弃了...");}else {tasks.add(r);//执行任务execTask(r);}}//2:执行任务;private void execTask(Runnable r) {//判断当前线程池中的线程总数量,是否超出了核心数,if(num < corePoolSize){new MyWorker("核心线程:"+num,tasks).start();num++;}else if(num < maxSize){new MyWorker("非核心线程:"+num,tasks).start();num++;}else {System.out.println("任务:"+r+" 被缓存了...");}}}
package com.leon.demo01;
/*测试类:1: 创建线程池类对象;2: 提交多个任务*/
public class MyTest {public static void main(String[] args) {//1:创建线程池类对象;MyThreadPool pool = new MyThreadPool(2,4,20);//2: 提交多个任务for (int i = 0; i <30 ; i++) {//3:创建任务对象,并提交给线程池MyTask my = new MyTask(i);pool.submit(my);}}
}

自定义线程池-线程池类和测试类编写相关推荐

  1. Java储蓄账户类及测试类,模拟存款

    老师布置了一个实验题:编写储蓄账户类及测试类,模拟存款,参考以下运行方式: 1.新开5个储蓄账户,各储蓄账户的编号.户名在新开储蓄账户时初始化,假设每位用户新开储蓄账户时都存入了一笔钱. 2.提示用户 ...

  2. 【六】ElasticSearch8.x Java API 实体类、工具类、测试类及常见问题

    ES 8.x 新版本中,Type 概念被弃用,所以新版 JavaAPI 也相应做出了改变,使用更加简便.ES 官方从 7.15 起开始建议使用新的 JavaAPI 1.依赖 <!-- elast ...

  3. 监听器内加了测试类导致测试类无法运行:java.lang.ClassCastException: 测试类 cannot be cast to 监听器

    正常是可以运行的 如果加了测试类到监听类中,就报下面的错误 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder&qu ...

  4. IDEA如何快速创建对应类的测试类

    比如我想要测试项目中的某一个类. 这边我具体到想测试CategoryServiceImpl这个类,如下图: 只需要将双击这个类,鼠标右键,然后选择go to到Test. 点击,创建测试 然后勾选你想要 ...

  5. SpringBoot 配置 generator代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)

    保姆级教程,逻辑删除及字段自动填充设置,特别要说明的是本次用的是MySQL数据库,如果使用Oracle数据库是,数据库配置需要改变,数据库表一定要大写,否则无法生成代码. 数据库表 CREATE TA ...

  6. 测试类/测试包/演示类/演示包的命名规范/命名规则

    文章目录 1.测试类的命名规范 2.测试程序的包命名规范 3.测试方法命名规范 4.演示类/范例类的命名规范 1.测试类的命名规范 测试类命名规则:Test + 要测试的类名称 测试类命名规则:功能名 ...

  7. JavaSE(八)——StringBuffer类、Arrays类、数组排序

    文章目录 1. StringBuffer类 1.1 定义 1.2 StringBuffer类与String类的区别 1.3 功能 1.4 String类和StringBuffer类的相互转换 2. 数 ...

  8. 自定义线程池-线程类和任务类代码实现

    自定义线程池-实现步骤 1:编写任务类(MyTask),实现Runnable接口; 2:编写线程类(MyWorker),用于执行任务,需要持有所有任务; 3:编写线程池类(MyThreadPool), ...

  9. 02java进阶03-异常、线程、同步、线程池、Lambda表达式、File类、递归

    目录 一.异常 二.异常的处理 三.自定义异常 四.多线程 五.线程.同步 5.1.线程 5.2同步 5.3线程安全 5.4线程状态 六.等待唤醒机制 6.1 线程间通信 6.2 等待唤醒机制 6.3 ...

最新文章

  1. 我有一个很好的思维习惯-反思
  2. MPB:林科院袁志林组-提取杨树人工林土壤微生物菌体细胞的4种方法
  3. B站回港受热捧——破圈下的资本新故事
  4. 华为的鸿蒙系统是海思_死心了!华为鸿蒙系统首款终端确认,不是手机
  5. 【华为云技术分享】从自建MongoDB聊聊云数据库MongoDB的蓬勃张力
  6. 要快乐的度过充满困难的一生——任总给陈珠芳及党委成员的一封信
  7. [转载] python 命名空间
  8. 烂泥:学习ssh之ssh隧道应用
  9. 简单的扫雷游戏代码(c++)
  10. linux命令iconv_Linux常用命令--iconv
  11. 《XMPP高级编程 使用JavaScript和jQuery》
  12. win10安装CUDA和cuDNN
  13. 染色基础知识(四)——怎么染?
  14. Lucas–Kanade(LK)光流算法详解
  15. 洛谷【P1359】租用游艇
  16. 几款比较有名的刷流量软件
  17. 虚拟服务器怎么选操作系统,虚拟主机怎样选择合适的操作系统
  18. Oracle11g导入DMP文件并导出为CSV文件过程全纪录
  19. git回退commit的操作
  20. 快速响应 智慧应急|大势智慧亮相第三届武汉国际安全应急博览会

热门文章

  1. 如何防止XshellPortable、putty、SecureCRT等断网造成Linux命令中断
  2. win7的python3.5安装numpy包
  3. CORBA GIOP消息格式学习
  4. ios基础篇(二十六)—— UITableViewCell的分组索引与标记
  5. [转载]用 grub2 启动 clover.iso 来启动 OS X
  6. jQuery的无new构建
  7. Jdom的SAXBuilder解析String形式的XML
  8. 自定义类型处理器的应用
  9. 测试如何转为开发人员
  10. commons-lang3:ArrayUtils