并发编程:自定义并发类:3、使用指定的线程工厂创建线程池

并发编程系列之线程池工厂类:Executors 前言 上节讲了讲自定义线程池,今天我们来聊聊线程池框架,在实际开发中我们还是基本使用线程框架Executor给我们提供的一些工具类,Java提供的Executor都在JUC(java.util.concurrent)包下面,主要包括:线程池工厂类Executors,线程池实现类ThreadPoolExecutor等,今天呢我们主要聊聊Executors,看看通过Executors我们可以做什么?OK,不多说废话,我们马上进入今天的主题,让我们扬帆起航,开启今天的并发之旅吧。 什么是Executor. 阅读详情

目录

Executor框架

一、主程序

二、其他类

三、其他说明


Executor框架

Executor框架使用线程创建和执行进行分离的机制。即Executor使用ThreadFactory接口来创建线程。

此处既是使用指定的线程工厂来创建线程池(这样线程池中使用的就是指定的线程类型)

一、主程序

package xyz.jangle.thread.test.n8_5.executorusefactory;

import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

import xyz.jangle.thread.test.n8_4.threadfactory.MyTask;
import xyz.jangle.thread.test.n8_4.threadfactory.MyThreadFactory;

/**
 * 8.5、在Executor对象中使用ThreadFactory
 * 
 * @author jangle
 * @email jangle@jangle.xyz
 * @time 2020年9月23日 下午4:47:55
 * 
 */
public class M {

	public static void main(String[] args) throws Exception {
		// 1、创建线程工厂
		var factory = new MyThreadFactory("jangle");
		// 2、创建线程池(使用1创建的线程工厂)
		var executor = Executors.newCachedThreadPool(factory);
		var task = new MyTask();
		// 3、提交任务
		Future<?> thread = executor.submit(task);
		executor.shutdown();
		executor.awaitTermination(1, TimeUnit.DAYS);
		System.out.println("M: 线程信息:"+thread);
		System.out.println("M:End...");
	}

}

二、其他类

参考:实现线程工厂来创建自定义线程(ThreadFactory)

三、其他说明

ThreadPoolExecutor类的构造方法中,也存在ThreadFactory接口的参数。

并发编程系列之如何正确使用线程池? 并发编程系列之如何正确使用线程池?在上一章节的学习中,我们掌握了线程的基本知识,接着本博客会继续学习多线程中的线程池知识。线程是不是越多越好?在学习多线程之前,读者可能会有疑问?如果单线程跑得太慢,那么是否就能多创建多个线程来跑任务? 阅读详情

相关推荐

西电 程序设计基础课程设计 作业

当时做的程序设计课程的作业. 一共五题, 以报告的形式提交. 质量应该比较高(高傲). 完整内容在这里 高精度计算 问题描述 涉及知识点: 数组, 流程控制, 函数等 要求: 用整型数组表示10进制大整数(超过 2322^{32}232 的整数), 数组的每个元素存储大整数的一位数字, 实现大整数的加减法. 问题分析 结构设计 可将高精度整数写成一个类. 成员变量有: int a[MAXN], len; bool negative; 其中, 数组a用来存储大整数的一个数位, a[1]为个位上的数字, a

Wings 2513

java redis 实现多线程资源复用

1、测试类 package com.redis.resource; import org.assertj.core.util.Lists; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.ListOperations; import org.springframework.d

春风化雨 1107

HPM6E00:PWM V2使用指南

HPM6E00:PWM V2使用指南

xikangsoon的博客 1733

java redis 商品秒杀_java使用redis模拟高并发秒杀活动

首先配置jedis包redis.clientsjedis3.0.1直接上main方法代码,里面注释已经包含了说明 :package com.xh.test;import java.util.HashMap;import java.util.Map;import java.util.concurrent.CountDownLatch;import java.util.concurrent.Execu...

weixin_32389225的博客 414

RPMsg:协议简介

两台计算机可以通过TCP/IP进行通信,那么同一颗芯片上的两个核心怎么通信呢?

SunnyZhou-1024的博客 1万+

倍福Twincat 3.0软件与C++通讯问题(ADS通讯)

倍福Twincat 3.0软件与C++通讯问题 倍福公司所开发的Twincat 3.0软件是基于Visual studio开发环境的一款自动化软件,目前其与C++程序通讯的方式主要还是靠ADS-DLL接口进行数据和信息传递,作者在Visual C++上进行混合编程开发,通过TwinCAT路由器和C语言API函数实现混合编程。 倍福软件提供: TcAdsDll.dll—动态链接库; TcAdsDll...

weixin_42811651的博客 1万+

67.java项目--redis(2)-redis四种模式

redis的模式 redis总共有四种模式:单体,分片,哨兵,以及集群,我们采用java代码连接redis. java连接redis的jar包,用很多种,主要有Redisson,Jedis,lettuce. redisson默认实现redis分布式锁; lettuce是springboot-redis-starter默认支持的redis客户端. 这里我们一jedis客户端来做步骤演示,步骤: 1.单体模式 搭建redis服务器 步骤: (1)创建一个文件夹single,并且复制redis.conf文件到

weixin_45449911的博客 715

ADS入门学习笔记——低噪声放大器(2)

1、输入匹配网络; 2、输出匹配网络;

weixin_42126696的博客 4988

java redis 连接池_redis 连接池并发读取数据,连接池无法回收连接

我自己编写了一个redis的客户端,在测并发的时候发现获取到的redis连接无法归还到连接池这是单元测试类public class RedisTest {private static final ExecutorService executorService = Executors.newFixedThreadPool(1000);private static CyclicBarrier c = ...

weixin_29483853的博客 613

随机子空间集成方法原理与scikit-learn实践

集成学习通过组合多个基学习器的预测结果来提升模型性能,是机器学习中的核心方法之一。随机子空间方法作为集成学习的重要变体,其核心原理是通过对特征空间进行随机子采样来增加模型多样性。这种方法特别适合处理高维数据,能有效缓解维度灾难问题,常与决策树、K近邻等对特征选择敏感的基学习器配合使用。在scikit-learn中,可以通过BaggingClassifier和BaggingRegressor实现随机子空间集成,关键参数包括max_features和n_estimators。实际应用中,该方法在金融风控、医疗诊

weixin_33773084的博客 376

【推荐100个unity插件之27】推荐5种办法实现unity人物布料系统 衣服裙子飘动 头发飘动 胸部抖动 骨骼模拟 配件摆动 尾巴摆动 —— 主要是Magica Cloth 2插件

要实现Unity中的人物布料系统并使其具备动态效果,可以探索多种技术方法。这些方法不仅可以使衣服、裙子、头发等元素自然飘动,还可以实现胸部抖动、骨骼模拟、配件摆动和尾巴摆动等细致效果。本文将深入探讨五种实现这些动态效果的技术方案,从基础的物理模拟到高级的动画控制,帮助你打造逼真的人物表现。本文主要探究Magica Cloth 2的使用,因为我想探究最好的实现方法,而不是探究最多的实现方法。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 6295

java定时器及利用redis加锁应对分布式

1、利用spring编写定时任务@Component @Configurable @EnableScheduling //关键注解 public class TimerScheduler { @Scheduled(cron = "0 0 0-23 * * ?") //时间表达式,每天整点执行 public void emailPushByCron(){ System.o...

xi_nuo的博客 2100

IC 笔试真题之吾见——华为实习(1)

前言 今天(2022 04 07)刚建立了一个专栏《IC真题之吾见》,准备记录一些IC真题的见解,为以后找工作做一点准备。 刷题绝不是目的,以题代练,以题代学。 题目来自师兄申请 华为实习“设计”岗位 的笔试真题。 见解大部分来自自己学习的理解,也有部分超纲知识是网络检索得到,希望可以多多在评论区留言交流,共同进步! 有问题的地方也希望可以直接批评指正! 后面也会同步更新此专栏! 1、下列有关时序分析的描述正确的是() A. recovery时间,是指异步控制信号在有效时钟沿到达之后必须保持

记录所学,分享知识,结识挚友 8635

【Java并发编程】了解并合理使用Executors工具类来创建线程池

描述Java中线程池的概念,举例一个“下载文件”的使用线程池的场景。最后代码模拟实现一个简单的线程池。

yican2580的博客 1991

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JAVA多线程并发编程:线程池原理与实战应用

摘要:本文详细讲解了JAVA线程池的核心原理与实战应用。主要内容包括:线程池的必要性(避免频繁创建销毁线程的性能损耗)、核心工作流程(任务提交、线程分配、队列存储等5个步骤)、ThreadPoolExecutor的7个关键参数配置,以及4种常见线程池(Fixed/Cached/Single/Scheduled)的适用场景。文章还分析了4种拒绝策略,并通过电商订单异步处理的实战案例,展示了如何自定义线程工厂和拒绝策略。最后指出生产环境中应避免使用Executors工具类,推荐通过ThreadPoolExecu

今天比昨天更努力一点! 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java并发编程面试必备:如何创建线程池、线程池拒绝策略

本文介绍了Java中的线程池及其在高并发编程中的应用,重点解析了ThreadPoolExecutor的核心参数配置、线程池类型选择及适用场景。文章探讨了常见的线程池拒绝策略,包括AbortPolicy和CallerRunsPolicy,并分析了它们在应对系统过载时的效果。此外,文章提供了20个常见面试问题及其详尽解答,涵盖了线程池的工作机制、任务队列、线程复用、异常处理与监控等关键知识点,为面试者提供了全面的复习指导,以帮助其在并发编程面试中表现出色。

程序员-杨胡广的博客 2259

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java并发编程新纪元:探索Executor线程池框架

在Java并发编程领域,线程的创建与管理至关重要。传统通过new Thread()的方式在性能优化、资源高效利用及系统扩展性方面存在明显局限。鉴于此,本文将介绍Executor线程池框架,这一相较于传统线程创建方式更为优越的并发编程工具。Executor线程池框架通过复用线程、智能管理资源及灵活配置,显著提升了系统性能、优化了资源利用率,并增强了系统的可扩展性。

Rye的博客 2647

java并发编程之创建线程的几种方式

自定义线程池是根据需求来定制线程池的一种方式。通常,我们可以通过 ThreadPoolExecutor 来实现线程池的自定义,而不使用 Executors 工厂方法。ThreadPoolExecutor 提供了丰富的参数配置,使得我们可以灵活地创建符合需求的线程池。:核心线程池大小,即线程池中始终保持的最小线程数。:线程池能够创建的最大线程数。如果任务量大于核心线程数,线程池会创建更多的线程,直到达到这个最大值。

m0_75209344的博客 1444

程序员的金三银四:创建线程池有哪几种方式?

通过本文的介绍,读者可以了解到创建线程池的几种常见方式,并对它们进行了比较和分析。在实际项目中,根据具体需求选择合适的方式创建线程池,可以更好地提高程序的并发性能和开发效率。

double222222的博客 1480

并发编程高频八股——线程池

大家好,我是钢板兽! 今天继续更新并发编程的第二篇高频八股——线程池,包括线程池的作用、创建线程池的方式、线程池的参数以及核心参数的设置。 本文的八股在对线程池的理解上比较浅显,创建线程池的方式和核心参数的设置,建议大家可以去实现一个动态线程池的demo或者复现开源项目,这样会加深对线程池的理解。

weixin_49426115的博客 1020

【2025】java并发编程之创建线程的几种方式

自定义线程池是根据需求来定制线程池的一种方式。通常,我们可以通过 ThreadPoolExecutor 来实现线程池的自定义,而不使用 Executors 工厂方法。ThreadPoolExecutor 提供了丰富的参数配置,使得我们可以灵活地创建符合需求的线程池。corePoolSize:核心线程池大小,即线程池中始终保持的最小线程数。maximumPoolSize:线程池能够创建的最大线程数。如果任务量大于核心线程数,线程池会创建更多的线程,直到达到这个最大值。

gwndjsh的博客 1083

Java 开发中的并发编程:理解线程与线程池

通过合理地使用线程池来管理线程,使用并发工具类来控制线程间的协调与同步,可以提升系统的响应能力和可伸缩性。并发编程是 Java 开发中的一个重要技能,它涉及线程的创建、管理、同步工具类的使用等多个方面。线程池可以有效地减少创建和销毁线程的开销,并且能够控制并发线程的数量,避免系统过载。本文将介绍 Java 并发编程的基础知识,包括线程的创建、管理、线程池的使用、以及常见的并发工具类,帮助开发者提升多线程编程技能,优化应用性能。在上面的代码中,我们创建了一个固定大小为 3 的线程池,并提交了 5 个任务。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 898

Java并发编程——线程池

线程池原理剖析、使用线程池的好处、Executor框架详解

m0_62909831的博客 1119

Java并发编程面试题: 线程池

收集大量Java经典面试题目,内容涵盖了包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 等知识点。适合准备Java面试的读者参考和复习。

m0_46013789的博客 1601

Java并发如何优雅的创建线程池

为何要线程池化?java使用过程中如何优雅的创建线程池

关注微信公众号「Coding我不配」 1463

【Java 并发编程】线程池理解与使用

一般都是创建任务、创建线程、启动线程,任务结束后系统就会销毁线程,但是这种方式一个线程只能执行一个任务并不能复用。如果还有任务的话,还需要再创建一个线程去执行它。在数据量庞大的情况,就需要频繁创建与销毁线程,我们知道构造一个线程的开销是非常大的,这样的话就可能会导致系统崩溃。那么一个线程能不能复用呢?答案是可以的,线程池就提供了线程回收机制,可以重复利用已创建的线程降低线程创建和销毁造成的消耗。通过打印结果可以知道通过线程池,可以做到一个线程执行多个任务。所以线程池就是一个可以复用线程的技术。

2301_79201049的博客 1224
上一篇: 并发编程:自定义并发类:2、使用线程工厂来生成自定义线程(ThreadFactory)
下一篇: 并发编程:自定义并发类:5、自定义周期调度任务
博风
博客等级 码龄16年 442粉丝 357原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值