`

JDK线程池的ThreadFactory

 
阅读更多
JDK线程池:Executors.newFixedThreadPool , Executors.newSingleThreadExecutor,由一个ThreadFactory来创建新的线程,默认情况下为Executors.defaultThreadFactory(),ThreadFactory接口:

    public interface ThreadFactory { 
        Thread newThread(Runnable r); 
    }

我们可以采用自定义的ThreadFactory工厂,增加对线程创建与销毁等更多的控制,

一个简单的例子,跟踪线程的创建与销毁:

    package org.guojje.threadpool; 
    
    import java.util.concurrent.atomic.AtomicInteger; 
    
    public class WorkThread extends Thread { 
    
        private Runnable target; 
        private AtomicInteger counter; 
    
        public WorkThread(Runnable target, AtomicInteger counter) { 
            this.target = target; 
            this.counter = counter; 
        } 
    
        @Override
        public void run() { 
            try { 
                target.run(); 
            } finally { 
                int c = counter.getAndDecrement(); 
                System.out.println("terminate no " + c + " Threads"); 
            } 
        } 
    }

    package org.guojje.threadpool; 
    
    import java.util.concurrent.ExecutorService; 
    import java.util.concurrent.Executors; 
    import java.util.concurrent.ThreadFactory; 
    import java.util.concurrent.TimeUnit; 
    import java.util.concurrent.atomic.AtomicInteger; 
    
    public class MyThread implements Runnable { 
         
         
        public static void main(String[] args) { 
           ExecutorService ctp =  Executors.newCachedThreadPool(new ThreadFactory() { 
                private AtomicInteger count = new AtomicInteger(); 
                public Thread newThread(Runnable r) { 
                    int c = count.incrementAndGet(); 
                    System.out.println("create no " + c + " Threads"); 
                    return new WorkThread(r,count); 
                     
                } 
            }); 
            
           ctp.execute(new MyThread()); 
           ctp.execute(new MyThread()); 
           ctp.execute(new MyThread()); 
           ctp.execute(new MyThread()); 
           ctp.execute(new MyThread()); 
           ctp.execute(new MyThread()); 
            
           ctp.shutdown(); 
            try { 
                ctp.awaitTermination(1200, TimeUnit.SECONDS); 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } 
        } 
         
        public void run(){ 
            System.out.println("complete a task!!!"); 
        } 
    } 

可以看到在执行这个过程中,共创建过几个线程。
分享到:
评论

相关推荐

    JDK线程池和Spring线程池的使用实例解析

    private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("jdk-thread-pool-%d").build(); private static final ExecutorService executorService = new ThreadPoolExecutor...

    Java 的线程工厂 ThreadFactory原理及源码详解

    在JDK的源码使用工厂模式,ThreadFactory就是其中一种。 在我们一般的使用中,创建一个线程,通常有两种方式: 继承Thread类,覆盖run方法,实现我们需要的业务 继承Runnable接口,实现run方法,实现我们需要的业务,...

    jdk1.5 线程并发与线程池的使用

    6. **threadFactory**:用于创建新线程的工厂。 7. **handler**:拒绝策略,当线程池和队列都满时,如何处理新提交的任务。 创建`ThreadPoolExecutor`实例后,可通过`execute()`方法提交`Runnable`任务,或通过`...

    java线程池概念.txt

    ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize || maximumPoolSize || maximumPoolSize || keepAliveTime ) throw new IllegalArgumentException(); if (workQueue =...

    java线程池的使用方式

    ThreadFactory threadFactory, RejectedExecutionHandler handler) ``` - **corePoolSize**:线程池的基本大小,在任何时间都会维持这么多线程。 - **maximumPoolSize**:线程池允许的最大线程数量。 - **...

    7000字+24张图带你彻底弄懂线程池.doc

    首先会去判断当前线程池的线程数是否小于核心线程数,如果小于,那么就直接通过 ThreadFactory 创建一个线程来执行这个任务。 3.如果线程池里的线程数不再小于核心线程数,那么此时就会尝试将任务放入阻塞队列中,...

    基于线程池的工作原理与源码解读

    6. threadFactory:线程工厂,用于创建线程,主要是为了给线程起名字。 7. handler:拒绝策略,当线程池中的线程被耗尽,且队列也满了的时候会调用。 二、线程池执行流程 线程池的执行流程可以用一个图来说明: 1...

    Best-Thread-Pool-implement-JDK:服务器端

    6. **线程工厂**(ThreadFactory threadFactory):创建新线程的工厂。 7. **拒绝策略**(RejectedExecutionHandler handler):当线程池和工作队列都满时,处理新任务的策略。 服务器端开发中,选择合适的线程池...

    Java基础总结下1

    ThreadFactory接口用于定制线程的创建。在并发安全方面,Java的synchronized关键字、volatile变量、final字段以及Atomic类提供了多种锁和同步机制。此外,Java的内存模型涉及到可见性、有序性和原子性,是并发编程中...

    Java并发编程(学习笔记).xmind

    threadFactory 创建线程的工厂 handler 拒绝策略 unit 是一个枚举,表示 keepAliveTime 的单位(有NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS,7个可选值...

    2019年一线互联网公司Java高级面试题总结

    - `threadFactory`: 创建新线程的工厂。 - `handler`: 拒绝策略,当无法执行更多任务时使用。 - **底层实现**: - 通过`ExecutorService`接口和`ThreadPoolExecutor`实现类来创建和管理线程池。 #### 6. ...

    代码编程 Java 中高级难度 笔试题(附答案)

    - `threadFactory`:线程工厂。 - `handler`:拒绝策略。 5. **避免或解决死锁问题** - 使用`Thread.join()`合理安排线程顺序。 - 避免循环等待:设置合理的锁顺序。 - 使用工具类`DeadlockDetector`检测潜在...

Global site tag (gtag.js) - Google Analytics