线程工厂 ThreadFactory
来源:互联网 发布:东方财富ddx源码 编辑:程序博客网 时间:2024/05/22 04:29
工厂模式是我们学习编程时,接触到的第一个设计模式,也是最简单、最常用的一个设计模式。在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
- ThreadFactory
- ThreadFactory
- ThreadFactory
- Java线程(五):Executors、ThreadFactory
- 使用java.util.concurrent.ThreadFactory类创建线程
- 使用java.util.concurrent.ThreadFactory来创建线程
- Thinking in Java学习笔记Daemon线程和ThreadFactory接口
- Java并发编程-05-使用ThreadFactory创建新线程
- 使用java.util.concurrent.ThreadFactory来创建线程
- Java使用ThreadFactory来创建新的线程
- 线程工厂
- 线程工厂
- 定制并发类(四)实现ThreadFactory接口生成自定义的线程
- 使用ant脚本,对java web项目,编译、打包、发布部署到tomcat
- MySQL逻辑架构
- 第2章 线性表 思维导图
- 如果输入的数字大于int型怎么办
- 黑马程序员-day21File对象
- 线程工厂 ThreadFactory
- iOS数据存储- Xcode6数据存储基础(1)
- OC第二个周六
- java中对象数组的使用
- template template parameter
- linux数据流重定向
- Android ListView 4 一个页面显示两个ListView
- java文件读写操作大全
- <<字符串与多维数组>>思维导图