ThreadFactory
An object that creates new threads on demand. Using thread factories removes hardwiring of calls tonew Thread
, enabling applications to use special thread subclasses, priorities, etc.
The simplest implementation of this interface is just:
- class SimpleThreadFactory implements ThreadFactory {
- public Thread newThread(Runnable r) {
- return new Thread(r);
- }
- }
The Executors.defaultThreadFactory
method provides a more useful simple implementation, that sets the created thread context to known values before returning it.
- /**
- * The default thread factory
- */
- static class DefaultThreadFactory implements ThreadFactory {
- static final AtomicInteger poolNumber = new AtomicInteger(1);
- final ThreadGroup group;
- final AtomicInteger threadNumber = new AtomicInteger(1);
- final String namePrefix;
- DefaultThreadFactory() {
- SecurityManager s = System.getSecurityManager();
- group = (s != null)? s.getThreadGroup() :
- Thread.currentThread().getThreadGroup();
- namePrefix = "pool-" +
- poolNumber.getAndIncrement() +
- "-thread-";
- }
- public Thread newThread(Runnable r) {
- Thread t = new Thread(group, r,
- namePrefix + threadNumber.getAndIncrement(),
- 0);
- if (t.isDaemon())
- t.setDaemon(false);
- if (t.getPriority() != Thread.NORM_PRIORITY)
- t.setPriority(Thread.NORM_PRIORITY);
- return t;
- }
- }
下面写一简单示例。
- package com.test;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.ThreadFactory;
- class Task implements Runnable{
- int taskId;
- public Task(int taskId) {
- this.taskId=taskId;
- }
- @Override
- public void run() {
- System.out.println(Thread.currentThread().getName()+"--taskId: "+taskId);
- }
- }
- class DaemonThreadFactory implements ThreadFactory {
- @Override
- public Thread newThread(Runnable r) {
- Thread t=new Thread(r);
- t.setDaemon(true);
- return t;
- }
- }
- public class ThreadFactoryTest {
- public static void main(String[] args) {
- ExecutorService exec=Executors.newFixedThreadPool(3,new DaemonThreadFactory());
- for(int i=0;i<3;i++) {
- exec.submit(new Task(i));
- }
- exec.shutdown();
- }
- }
输出如下:
Thread-1--taskId: 1
Thread-2--taskId: 2
转载于:https://www.cnblogs.com/yaowen/p/6069628.html
ThreadFactory相关推荐
- JDK线程池的ThreadFactory
JDK线程池:Executors.newFixedThreadPool , Executors.newSingleThreadExecutor,由一个ThreadFactory来创建新的线程,默认情况 ...
- 13、Excutors 结合 ThreadFactory 自动给线程加上线程名
2019独角兽企业重金招聘Python工程师标准>>> 1.需求场景 很多时候我们都会使用线程池,而且是使用多个线程池,比如在:生产者和消费者模型中,生产者线程放到一个线程池里面,而 ...
- JAVA高并发工作笔记0002---高并发编程之使用ThreadFactory来创建新的线程
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 首先来构建线程封装类WorkThread,该类的功能主要是为了能够更好的管理线程而创建的 publ ...
- Java并发编程与技术内幕:ThreadFactory、ThreadLocal
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了ThreadFactory.ThreadLocal的实例和源码解析 一.Th ...
- Java ThreadFactory接口用法
根据需要创建新线程的对象.使用线程工厂就无需再手工编写对 new Thread 的调用了,从而允许应用程序使用特殊的线程子类.属性等等. JDK中的介绍: An object that creates ...
- Java线程(五):Executors、ThreadFactory
Executors public class Executors 一个功能非常强大的辅助类. 此包中所定义的 Executor.ExecutorService.ScheduledExecutorSer ...
- 面试高频——JUC并发工具包快速上手(超详细总结)
目录 一.什么是JUC 二.基本知识 2.1.进程和线程 2.2.Java默认有两个进程 2.3.Java能够开启线程吗? 2.4.并发和并行 2.5.线程的状态 2.6.wait和sleep的区别 ...
- Android线程池简单使用
线程池使用的好处: 1)对多个线程进行统一地管理,避免资源竞争中出现的问题. 2)对线程进行复用,线程在执行完任务后不会立刻销毁,而会等待另外的任务,这样就不会频繁地创建.销毁线程和调用GC. 使用T ...
- 深入理解Java线程池:ThreadPoolExecutor
线程池介绍 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题: 如果并发的请求数量非常多,但每个线 ...
最新文章
- JavaScript(循环)
- 2016级算法期末上机-F.中等·AlvinZH's Fight with DDLs II
- 圆柱体积怎么算立方公式_【六年级数学微课】巧算圆锥的体积
- redis 2m数据读取_Flink读写Redis(二)读取redis数据
- ⭐register_chrdev、register_chrdev_region以及alloc_chrdev_region之间的区别
- 深度装机大师一键重装_笔记本怎么重装系统?笔记本自己如何重装系统?
- 通过代码解决全角问题类调用法
- tensorflow : gfile 函数
- Unity3d 局域网小游戏DEMO学习
- WIZ ConfigTool-批量配置WIZnet S2E模块
- (九)练习:美萍酒店管理系统-系统设置-删除类型、删除房间
- ABAP 供应商主数据比较常用的表
- C/C++编程:仿函数
- 唐珂:国外农业物联网技术发展及对我国的启示
- python中count什么意思_python中函数COUNT()的功能是什么
- #Geek Talk# AI and FinTech,投资阿里巴巴的 Benson Tam 也会跟大家一起 Talk
- 120帧手机动态壁纸_小英雄高清动态壁纸app下载-小英雄高清动态壁纸v2.6手机下载...
- UFI模式下GPT分区安装win8
- verilog多数表决器
- 服务器文件夹 删除 修改 日志,win服务器 删除文件夹
热门文章
- JS使png背景图片透明
- How run Powershell ISE on WIndows Server2008
- 机房收费--一般用户
- 面试官问:你讲讲分布式事务问题的几种方案?
- 5分钟图解Hbase列式存储
- 从平台到中台 | Elaticsearch 在蚂蚁金服的实践经验
- 图解 Elasticsearch 原理
- 数据库:数据库死机和掉电时如何让恢复数据
- mysql哪些优化手段_mysql explain 及常见优化手段
- docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...