博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义线程池
阅读量:6937 次
发布时间:2019-06-27

本文共 2304 字,大约阅读时间需要 7 分钟。

hot3.png

自定义线程工厂:

public class CustomThreadFactory implements ThreadFactory {    private static final Logger LOGGER = LoggerFactory.getLogger(CustomThreadFactory.class);    public static Thread.UncaughtExceptionHandler LOGGER_UNCAUGHT_EXCEPTION_HANDLER = (t, e) -> LOGGER.error(t.getName(), e);    private static final AtomicInteger poolNumber = new AtomicInteger(1);    private final ThreadGroup group;    private final AtomicInteger threadNumber = new AtomicInteger(1);    private final String namePrefix;    private CustomThreadFactory(ThreadGroup group, String prefix) {        if (group == null) {            SecurityManager s = System.getSecurityManager();            this.group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();        } else {            this.group = group;        }        if (prefix == null) {            this.namePrefix = "custom-" + poolNumber.getAndIncrement() + "-thread-";        } else {            this.namePrefix = prefix + "-pool_" + poolNumber.getAndIncrement() + "-thread-";        }    }    public CustomThreadFactory(String prefix) {        this(null, prefix);    }    @Override    public Thread newThread(Runnable r) {        // 线程组中活跃的线程数//        this.group.activeCount();        Thread t = new Thread(this.group, r, this.namePrefix + this.threadNumber.getAndIncrement(), 0);        t.setDaemon(true);        t.setUncaughtExceptionHandler(LOGGER_UNCAUGHT_EXCEPTION_HANDLER);        if (t.getPriority() != Thread.NORM_PRIORITY) {            t.setPriority(Thread.NORM_PRIORITY);        }        return t;    }}

单例模式自定义线程池:

public class MyAsyncExecutor extends ThreadPoolExecutor {    private static final Logger LOGGER = LoggerFactory.getLogger(MyAsyncExecutor.class);    private MyAsyncExecutor() {        super(Runtime.getRuntime().availableProcessors() * 5,                500,                1L,                TimeUnit.MINUTES,                new LinkedBlockingQueue<>(1000),                new CustomThreadFactory("MyAsync"),                (r, e) -> LOGGER.error("{}", e.getActiveCount()));    }    public static MyAsyncExecutor instance() {        return Holder.INSTANCE;    }    private static class Holder {        private static MyAsyncExecutor INSTANCE = new MyAsyncExecutor();    }}

转载于:https://my.oschina.net/hensemlee/blog/3003565

你可能感兴趣的文章
贪吃蛇闪烁现象
查看>>
NOIP 2014 D1T1 -生活大爆炸版石头剪刀布
查看>>
浅谈android反调试之轮询TracePid(解决方案是特色)
查看>>
GO 基础学习笔记(4)| 参数传递
查看>>
[转]熵(Entropy),交叉熵(Cross-Entropy),KL-松散度(KL Divergence)
查看>>
VS基本教程
查看>>
Jmeter也能IP欺骗!
查看>>
iOS开发的Sketch之旅
查看>>
Python之tkinter中的askyescancel窗口返回值
查看>>
asp.net core系列 55 IS4使用Identity密码保护API
查看>>
VS2008中生成DLL项目
查看>>
1.4(Spring MVC学习笔记)JSON数据交互与RESTful支持
查看>>
[系统]安装fedora 19
查看>>
ajax发送请求(关于搜索引擎)
查看>>
思维导图
查看>>
php 开发环境部署
查看>>
js 文本框只能输入数字
查看>>
java版b2b2c社交电商spring cloud分布式微服务(九)服务链路追踪(Spring Cloud Sleuth)...
查看>>
注意:Java中Switch语句的参数类型-_-!...
查看>>
jsp中怎么调用java类中的方法
查看>>