自定义线程池-线程池类和测试类编写
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);}}
}
自定义线程池-线程池类和测试类编写相关推荐
- Java储蓄账户类及测试类,模拟存款
老师布置了一个实验题:编写储蓄账户类及测试类,模拟存款,参考以下运行方式: 1.新开5个储蓄账户,各储蓄账户的编号.户名在新开储蓄账户时初始化,假设每位用户新开储蓄账户时都存入了一笔钱. 2.提示用户 ...
- 【六】ElasticSearch8.x Java API 实体类、工具类、测试类及常见问题
ES 8.x 新版本中,Type 概念被弃用,所以新版 JavaAPI 也相应做出了改变,使用更加简便.ES 官方从 7.15 起开始建议使用新的 JavaAPI 1.依赖 <!-- elast ...
- 监听器内加了测试类导致测试类无法运行:java.lang.ClassCastException: 测试类 cannot be cast to 监听器
正常是可以运行的 如果加了测试类到监听类中,就报下面的错误 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder&qu ...
- IDEA如何快速创建对应类的测试类
比如我想要测试项目中的某一个类. 这边我具体到想测试CategoryServiceImpl这个类,如下图: 只需要将双击这个类,鼠标右键,然后选择go to到Test. 点击,创建测试 然后勾选你想要 ...
- SpringBoot 配置 generator代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
保姆级教程,逻辑删除及字段自动填充设置,特别要说明的是本次用的是MySQL数据库,如果使用Oracle数据库是,数据库配置需要改变,数据库表一定要大写,否则无法生成代码. 数据库表 CREATE TA ...
- 测试类/测试包/演示类/演示包的命名规范/命名规则
文章目录 1.测试类的命名规范 2.测试程序的包命名规范 3.测试方法命名规范 4.演示类/范例类的命名规范 1.测试类的命名规范 测试类命名规则:Test + 要测试的类名称 测试类命名规则:功能名 ...
- JavaSE(八)——StringBuffer类、Arrays类、数组排序
文章目录 1. StringBuffer类 1.1 定义 1.2 StringBuffer类与String类的区别 1.3 功能 1.4 String类和StringBuffer类的相互转换 2. 数 ...
- 自定义线程池-线程类和任务类代码实现
自定义线程池-实现步骤 1:编写任务类(MyTask),实现Runnable接口; 2:编写线程类(MyWorker),用于执行任务,需要持有所有任务; 3:编写线程池类(MyThreadPool), ...
- 02java进阶03-异常、线程、同步、线程池、Lambda表达式、File类、递归
目录 一.异常 二.异常的处理 三.自定义异常 四.多线程 五.线程.同步 5.1.线程 5.2同步 5.3线程安全 5.4线程状态 六.等待唤醒机制 6.1 线程间通信 6.2 等待唤醒机制 6.3 ...
最新文章
- 我有一个很好的思维习惯-反思
- MPB:林科院袁志林组-提取杨树人工林土壤微生物菌体细胞的4种方法
- B站回港受热捧——破圈下的资本新故事
- 华为的鸿蒙系统是海思_死心了!华为鸿蒙系统首款终端确认,不是手机
- 【华为云技术分享】从自建MongoDB聊聊云数据库MongoDB的蓬勃张力
- 要快乐的度过充满困难的一生——任总给陈珠芳及党委成员的一封信
- [转载] python 命名空间
- 烂泥:学习ssh之ssh隧道应用
- 简单的扫雷游戏代码(c++)
- linux命令iconv_Linux常用命令--iconv
- 《XMPP高级编程 使用JavaScript和jQuery》
- win10安装CUDA和cuDNN
- 染色基础知识(四)——怎么染?
- Lucas–Kanade(LK)光流算法详解
- 洛谷【P1359】租用游艇
- 几款比较有名的刷流量软件
- 虚拟服务器怎么选操作系统,虚拟主机怎样选择合适的操作系统
- Oracle11g导入DMP文件并导出为CSV文件过程全纪录
- git回退commit的操作
- 快速响应 智慧应急|大势智慧亮相第三届武汉国际安全应急博览会