线程工厂 ThreadFactory源码解读
来源:互联网 发布:linux自学书籍 编辑:程序博客网 时间:2024/05/16 12:52
线程工厂 ThreadFactory源码解读
分类: 多线程2012-11-21 13:16 1232人阅读 评论(0) 收藏 举报
工厂模式是我们学习编程时,接触到的第一个设计模式,也是最简单、最常用的一个设计模式。在JDK的源码中,大量使用工厂模式,ThreadFactory就是其中一种。
上述线程工厂,只是创建了一个新线程,其他什么都没干。实际使用时,一般不会创建这么简单的线程工厂。
在我们一般的使用中,创建一个线程,通常有两种方式:
- 继承Thread类,覆盖run方法,实现我们需要的业务
- 继承Runnable接口,实现run方法,实现我们需要的业务,并且调用new Thread(Runnable)方法,将其包装为一个线程执行
ThreadFactory接口
ThreadFactory接口很简单,源码如下:
- public interface ThreadFactory {
- Thread newThread(Runnable r);
- }
我们可以看到ThreadFactory中,只有一个newThread方法,它负责接收一个Runnable对象,并将其封装到Thread对象中,进行执行。
最简单的ThreadFactory实现
我们可以实现上述接口,做一个最简单的线程工厂出来,源码如下:- public class SimpleThreadFactory implements ThreadFactory{
- @Override
- public Thread newThread(Runnable r) {
- return new Thread(r);
- }
- }
上述线程工厂,只是创建了一个新线程,其他什么都没干。实际使用时,一般不会创建这么简单的线程工厂。
- public class FixCountThreadFactory implements ThreadFactory{
- private final int MAX_THREAD;
- private final AtomicInteger count = new AtomicInteger(0);
- public FixCountThreadFactory(int maxThread) {
- MAX_THREAD = maxThread;
- }
- @Override
- public Thread newThread(Runnable r) {
- int incrementAndGet = count.incrementAndGet();
- if(incrementAndGet > MAX_THREAD)
- {
- count.decrementAndGet();
- return null;
- }
- return new Thread(r);
- }
- }
上述线程工厂,可以控制创建线程的总数。
JDK中默认的线程工厂
在Executors工具类中,JDK提供了一个非常简单的线程工程,源码如下:
- 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;
- }
0 0
- 线程工厂 ThreadFactory源码解读
- 线程工厂 ThreadFactory源码解读
- 线程工厂 ThreadFactory
- 关于threadFactory理解和利用线程工厂监控线程
- 线程工程ThreadFactory
- Netty源码解读之线程
- Netty源码解读之线程
- ThreadPoolExecutor线程池源码解读
- ThreadFactory
- ThreadFactory
- ThreadFactory
- java.util.concurrent解读,自定义线程工厂,线程池
- Java线程(五):Executors、ThreadFactory
- Java ThreadFactory接口用法与源码实现
- JDK7中ThreadFactory和RejectedExecutionHandler源码概述
- 线程条件队列ConditionObject源码解读
- 使用java.util.concurrent.ThreadFactory类创建线程
- 使用java.util.concurrent.ThreadFactory来创建线程
- 排序查找一____快排应用与间隔
- Android JNI 知识简介
- 压缩SQLServer数据库日志的一个存储过程
- uva12801 Grandpa Pepe’s Pizza
- 利用netfilter机制,实现内核防火墙把http请求和回应的数据包截获后,解释出其中的http层数据
- 线程工厂 ThreadFactory源码解读
- BZOJ 1951 SDOI2010 古代猪文 数论 Lucas定理
- yii 1.1.*中日期组件CJuiDatePicker的使用
- HttpClient网络通信
- github初步使用
- 基于Socket的UDP和TCP编程介绍
- android 支付宝SDK集成
- 字符串数组名与字符串指针的区别
- Football - POJ 3071 概率dp