目的:有时候为了快速定位出现错误的位置,在采用线程池时我们需要自定义线程池的名称。

1、创建ThreadFactory(ThreadPoolExecutor默认采用的是DefaultThreadFactory,可以参照代码)。

public class NamedThreadFactory implementsThreadFactory{private final AtomicInteger poolNumber = new AtomicInteger(1);private finalThreadGroup threadGroup;private final AtomicInteger threadNumber = new AtomicInteger(1);public finalString namePrefix;

NamedThreadFactory(String name){

SecurityManager s=System.getSecurityManager();

threadGroup= (s != null) ?s.getThreadGroup() :

Thread.currentThread().getThreadGroup();if (null==name || "".equals(name.trim())){

name= "pool";

}

namePrefix= name +"-"+poolNumber.getAndIncrement()+

"-thread-";

}

@OverridepublicThread newThread(Runnable r) {

Thread t= newThread(threadGroup, r,

namePrefix+threadNumber.getAndIncrement(),0);if(t.isDaemon())

t.setDaemon(false);if (t.getPriority() !=Thread.NORM_PRIORITY)

t.setPriority(Thread.NORM_PRIORITY);returnt;

}

}

2、创建线程池

//核心线程满了,则进入队列,队列满了,则创建新线程,当线程数达到最大线程数,则进入拒绝策略

static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5,5,1,

TimeUnit.MINUTES,new LinkedBlockingDeque<>(),new NamedThreadFactory("测试"));

3、测试代码

static ThreadLocalthreadLocal = new ThreadLocal(){

@OverrideprotectedSimpleDateFormat initialValue() {return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

}

};public static voidmain(String[] args) {

threadPoolExecutor.execute(newRunnable() {

@Overridepublic voidrun() {try{

System.out.println(threadLocal.get().parse("2019-10-22 16:59:00"));throw new NullPointerException("sfa");

}catch(ParseException e) {

e.printStackTrace();

}

}

});

}

4、结果

补充:

1、参数解析

2、拒绝策略

(1)、CallerRunsPolicy

该任务被线程池拒绝,由调用execute方法的线程(如main线程)执行该任务。一般并发比较小,性能要求不高,不允许失败。但是,由于调用者自己运行任务,如果任务提交速度过快,可能导致程序阻塞,性能效率上必然的损失较大。

(2)、AbortPolicy

丢弃任务,并抛出 RejectedExecutionException 异常。线程池默认的拒绝策略。必须处理好抛出的异常,否则会打断当前的执行流程,影响后续的任务执行。

(3)、DiscardOldestPolicy

丢弃任务,不过也不抛出异常。

(4)、DiscardOldestPolicy

当触发拒绝策略,只要线程池没有关闭的话,丢弃阻塞队列 workQueue 中最老的一个任务,并将新任务加入。

java修改线程池名称_自定义线程池的名称(ThreadPoolExecutor)相关推荐

  1. java自定义线程池池,线程池使用及自定义线程池

    一 案例引申 编写代码同时只允许五个线程并发访问(以下文的函数为例子) private static void method() { System.out.println("ThreadNa ...

  2. 【Android 异步操作】线程池 ( 线程池使用示例 | 自定义线程池使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )

    文章目录 一.自定义线程池使用流程 二.自定义任务拒绝处理策略 三.完整代码示例 在博客 [Android 异步操作]线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTas ...

  3. java 修改最大nio连接数_携程基于Quasar协程的NIO实践

    IO密集型系统在高并发场景下,会有大量线程处于阻塞状态,性能低下,JAVA上成熟的非阻塞IO(NIO)技术可解决该问题.目前Java项目对接NIO的方式主要依靠回调,代码复杂度高,降低了代码可读性与可 ...

  4. python线程异常中断_中断线程

    如果线程需要执行一个长时间任务,就可能需要能中断线程.中断线程就是其他线程给该线程发一个信号,该线程收到信号后结束执行run()方法,使得自身线程能立刻结束运行. 我们举个栗子:假设从网络下载一个10 ...

  5. java 修改 枚举类字段_枚举枚举和修改“最终静态”字段的方法

    java 修改 枚举类字段 在本新闻通讯中,该新闻通讯最初发表在Java专家的新闻通讯第161期中,我们研究了如何使用sun.reflect包中的反射类在Sun JDK中创建枚举实例. 显然,这仅适用 ...

  6. python两个线程交替打印_三线程按顺序交替打印ABC的四种方法

    建立三个线程A.B.C,A线程打印10次字母A,B线程打印10次字母B,C线程打印10次字母C,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印. 二.Synchroni ...

  7. 平流式隔油池计算_广州隔油池清理公司讲述清理隔油池程序和标准_新闻中心...

    广州隔油池清理公司讲述清理隔油池程序和标准_隔油池清理,清理隔油池,隔油池清理方案,隔油池清理公司,隔油池清理价格 1.?隔油池/内污水油每月定期清理一次,若检查发现污水油超标以致可能影响隔油池有效性 ...

  8. java 等待线程池结束_等待线程池中任务执行完毕做优雅关闭

    背景 在Java开发中,如果涉及多线程,会经常使用到线程池,本期不额外讲述线程池本身相关的东西.考虑一种场景,如果我们提交给线程池的任务都相对比较耗时,而在任务启动运行后,如果后续有需求的变更,要重新 ...

  9. 线程池原理与自定义线程池

最新文章

  1. 有三AI正式跨入2.0,诚邀参与内容创作以及广告须知
  2. Angular应用只执行指定单元测试的小技巧
  3. Struts2学习---基本配置,action,动态方法调用,action接收参数
  4. int 取值范围_一定范围内的随机数
  5. DNS资源记录类型的总结
  6. [VC]基于对话框程序,自定义工具栏(支持真彩色图标,可添加文字)
  7. 极速安装JumpServer - 官方文档版
  8. win7安装SQL2005图文教程
  9. 900款工作岗位竞聘PPT模板免费下载
  10. win7计算机怎么优化驱动器,win7电脑怎么优化
  11. 「AutoML」AutoML专栏上线,跟Google一起见证调参党的末日?
  12. 单片机应用系统设计技术——智能温控器
  13. Sorry, you have been blocked !vultr 又被 openai 屏蔽了,只能换个 vps 了
  14. ThinkPad E460如何进入bios
  15. 【分布式】分布式系统概述
  16. 桌面计算机回收站打不开,b8,教您电脑回收站打不开怎么解决
  17. python中pytest教程_Pytest安装新手详细教程
  18. php xmp,在jpeg中编写XMP元数据(使用PHP) – 使用单个或多个rdf:描述块
  19. 信号与系统(二):拉普拉斯变换的意义:谈H(s)、h(t)、δ(t)
  20. Tomcat启动报A child container failed during start问题解决

热门文章

  1. 开发落网电台windows phone 8应用的计划(3)
  2. python 函数练习题
  3. 科学理论和计算机技术的发展史,探究计算机科学与技术的发展趋势
  4. 关于 Android 平台开发相关的有哪些推荐书籍?
  5. 不得不承认、放弃造车是明智之举!
  6. Axure之实现图片自动循环切换效果
  7. 微信小程序支付组件开发实战
  8. 微信小程序支付开发具体步骤
  9. Linux mysql数据库修改密码
  10. sql server中对日期字段值的比较