当前位置:网站首页>线程池中的线程工厂
线程池中的线程工厂
2022-07-07 16:37:00 【珠峰下的沙砾】
既然都使用的线程池,则创建线程的工作都交付给了线程池去完成。我们只需要告诉线程池需要多少个线程,剩下的工作都交于线程池完成。在线程池中创建线程使用的是线程工厂,
下面我们看看有哪些线程工厂:
ThreadFactory(父级接口)
public interface ThreadFactory {
// 构造一个新的Thread 。实现还可以初始化优先级、名称、守护进程状态、 ThreadGroup等
Thread newThread(Runnable r);
}
DefaultThreadFactory(默认使用)
// 默认线程工厂
static class DefaultThreadFactory implements ThreadFactory {
// 线程池号
private static final AtomicInteger poolNumber = new AtomicInteger(1);
// 线程组
private final ThreadGroup group;
// 线程号
private final AtomicInteger threadNumber = new AtomicInteger(1);
// 线程名称前缀
private final String namePrefix;
DefaultThreadFactory() {
SecurityManager s = System.getSecurityManager();
// 获取线程组
group = (s != null) ? s.getThreadGroup() :
Thread.currentThread().getThreadGroup();
// 线程名称前缀 = pool + 线程池号 + thread
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;
}
}
PrivilegedThreadFactory
// 特权线程工厂
// 线程工厂捕获访问控制上下文和类加载器
static class PrivilegedThreadFactory extends DefaultThreadFactory {
private final AccessControlContext acc;
private final ClassLoader ccl;
PrivilegedThreadFactory() {
super();
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
// Calls to getContextClassLoader from this class
// never trigger a security check, but we check
// whether our callers have this permission anyways.
sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
// Fail fast
sm.checkPermission(new RuntimePermission("setContextClassLoader"));
}
this.acc = AccessController.getContext();
this.ccl = Thread.currentThread().getContextClassLoader();
}
public Thread newThread(final Runnable r) {
return super.newThread(new Runnable() {
public void run() {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
public Void run() {
Thread.currentThread().setContextClassLoader(ccl);
r.run();
return null;
}
}, acc);
}
});
}
}
边栏推荐
- 万字保姆级长文——Linkedin元数据管理平台Datahub离线安装指南
- 【C语言】字符串函数
- 开发一个小程序商城需要多少钱?
- A few simple steps to teach you how to see the K-line diagram
- sqlite sql 异常 near “with“: syntax error
- 备份阿里云实例-oss-browser
- Using stored procedures, timers, triggers to solve data analysis problems
- Discuss | what preparations should be made before ar application is launched?
- 现货白银分析中的一些要点
- Year SQL audit platform
猜你喜欢
Kirk Borne的本周学习资源精选【点击标题直接下载】
Native JS verification code
[principles and technologies of network attack and Defense] Chapter 5: denial of service attack
debian10编译安装mysql
[C language] string function
[trusted computing] Lesson 12: TPM authorization and conversation
磁盘存储链式的B树与B+树
小程序中实现付款功能
Taffydb open source JS database
Wireshark analyzes packet capture data * cap
随机推荐
“解密”华为机器视觉军团:华为向上,产业向前
Nunjuks template engine
能同时做三个分割任务的模型,性能和效率优于MaskFormer!Meta&UIUC提出通用分割模型,性能优于任务特定模型!开源!...
[trusted computing] Lesson 13: TPM extended authorization and key management
【demo】循环队列及条件锁实现goroutine间的通信
[trusted computing] Lesson 12: TPM authorization and conversation
2022年理财有哪些产品?哪些适合新手?
socket編程之常用api介紹與socket、select、poll、epoll高並發服務器模型代碼實現
[principle and technology of network attack and Defense] Chapter 7: password attack technology Chapter 8: network monitoring technology
Discuss | frankly, why is it difficult to implement industrial AR applications?
高考填志愿规则
PIP related commands
单臂路由和三层交换的简单配置
Classification of regression tests
Tips for this week 131: special member functions and ` = Default`
AI 击败了人类,设计了更好的经济机制
2022年理财产品的一般收益率是多少?
海量数据去重的hash,bitmap与布隆过滤器Bloom Filter
SD_DATA_SEND_SHIFT_REGISTER
[principles and technologies of network attack and Defense] Chapter 3: network reconnaissance technology