`

线程工厂

阅读更多

线程池的作用:
     线程池作用就是限制系统中执行线程的数量。
     根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开始运行了;否则进入等待队列
为什么要用线程池:
   1. 减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务
   2. 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)

 

1、线程池需要创建一个线程,都要通过一个线程工厂来完成。默认的线程工厂创建一个新的、非后台的线程并没有特殊的配置。ThreadFactory只有唯一的方法:newThread,它会在线程池需要创建一个新线程时调用。

2、利用安全策略为某些特定的代码基授予权限,可能想要使用Executors中的privilegedThreadFactory工厂来构建你的 线程工厂。不使用privilegedThreadFactor的话,这样创建出来的线程池的线程所继承的权限,是客户调用execute或submit 的当时,一个线程所需要的权限。

3、很可能需要使用定制的线程工厂。它可能希望为池线程指明一个UncaughtExceptionHandler,或实例化一个定制的THread类实例。

public class MyThreaadFactory implements ThreadFactory{

    private final String poolName;

 

    public  MyThreadFactory(String poolName){

        this.poolName=poolName;

    }

    public Thread newThread(Runnable runnable){

        return new MyAppThread(runnable,poolName);

    }
}

public class MyAppThread extends Thread{

   public static final String DEFAULT_NAME="MyAppThread";

   private static volatile boolean debugLifecycle=false;

   private static final AtomicInteger created=new AtomicInteger();

   private static final AtomicInteger alive=new AtomicInteger();

   private static final Logger log=Logger.getAnoymousLogger();

 

   public MyAppThread(Runnable r){this(r,DEFAULT_NAME);}  

   public MyAppThread(Runnable runnable,String name){

      super(runnable,name+"-"+created.incrementAndGet());

      setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){

           public void uncaughtException(Thread t,Throwable e){

                  log.log(Level.SEVERE,"UNCAUGHT in thread"+t.getName(),e);

           }

      });

   }

 

   public void run(){

        boolean debug=debugLifecycle;

        if (debug) log.log(Level.FINE,"created"+getName());

        try{

                alive.incrementAndGet();

                super.run();

        }

        finally{

             alive.decrementAndGet();

             if (debug) log.log(Level.FINE,"Exiting"+getName());             

        }

   }

 

   public static int getThreadsCreated(){return created.get();}

   public static int getThreadsAlive(){return alive.get();}

   public static boolean getDebug(){return debugLifecycle;}

   public static void setDebug(boolean b){debugLifecycle=b;}

}

分享到:
评论

相关推荐

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

    设想这样一种场景,我们需要一个线程池,并且对于线程池中的线程对象,赋予统一的线程优先级、统一的名称、甚至进行统一的业务处理或和业务方面的初始化工作,这时工厂方法就是最好用的方法了 ThreadFactory接口 ...

    Android开发经验谈:并发编程(线程与线程池)(推荐)

    线程工厂可以帮助我们创建线程,而任务队列可以帮助我们管理任务。我们可以使用ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等队列来管理任务。 线程和线程池是Android开发...

    线程池管理多线程上传

    - **线程工厂(ThreadFactory)**:用于创建新线程,可以自定义线程的初始化行为。 - **拒绝策略(Rejection Policy)**:当工作队列满时,新任务的处理策略,如丢弃任务、抛出异常或创建新的线程等。 2. **...

    多线程(线程池)的相关研究资料

    线程池通常包含以下组件:工作队列(存储待执行的任务)、工作线程(从队列中取出任务并执行)、线程工厂(用于创建新线程)和拒绝策略(当工作队列满时处理新任务的方式,如丢弃任务或启动新线程)。 线程池的实现...

    21-多线程和线程同步1

    通过实现 ThreadFactory 接口可以创建自己的线程工厂类。 Executor 框架 Executor 框架是 Java 中的一个高级线程管理框架,提供了一个统一的线程管理机制。Executor 框架包括 Executor 接口、ExecutorService 接口...

    TheadPool 线程池源码 自动管理线程的创建和销毁

    - **线程工厂**:用于创建新线程的接口,可以根据需求定制线程的初始化行为。 - **调度策略**:决定何时创建新线程、何时关闭线程、如何处理超出容量的任务等。 4. **线程池的生命周期管理** - **创建**:线程池...

    多线程 dataGridView问题

    例如,你可以创建一个线程工厂,根据需求动态生成并启动线程: ```csharp public class DataGridViewThreadFactory { public Thread CreateThread(Func[], void> action) { return new Thread(() => action(new ...

    多线程编程指南(很好)

    2. 线程工厂:用于创建线程的工厂模式,可以统一管理线程的创建、配置和销毁。 七、线程异常处理 1. 异常处理:在多线程环境中,确保每个线程都有适当的异常处理机制,以免一个线程的异常导致整个程序崩溃。 总结...

    java多线程2

    Guava库中的ThreadFactoryBuilder,可以帮助构建自定义的线程工厂;以及Hystrix,这是一个Netflix开发的库,用于实现服务降级、熔断、隔离等高可用策略,其中也涉及到多线程的使用。 在J2SE(Java 2 Standard ...

    Java中的线程与线程池.pptx

    - threadFactory:线程工厂,用于创建线程。 - handler:拒绝策略,当线程池和工作队列都满时,用于处理新提交的任务。 使用Executors构建线程池时需要注意,如使用默认设置可能导致线程池积压过多任务或创建过多...

    Java多线程.pdf

    线程池的主要参数包括:corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(线程空闲时间)、workQueue(工作队列)、threadFactory(线程工厂)、handler(拒绝策略)。其中,...

    java多线程相关面试题 1

    * threadFactory:线程池的线程工厂 这些参数的设置将影响线程池的性能和行为。 3. 讲一讲线程池中的 ThreadPoolExecutor,每个参数干什么用的? ThreadPoolExecutor 是 Java 中的一种线程池实现,它提供了一个...

    线程面试汇总.docx

    通常,可以通过捕获异常或将异常传递给线程工厂来处理这类问题。 ### 在两个线程间共享数据 - 在两个线程间共享数据时,需要考虑数据的一致性和同步问题。可以使用`volatile`关键字、`synchronized`关键字或`...

    spring 多线程队列执行

    - **线程生命周期**:Spring允许自定义线程工厂来创建线程,可以设置线程名称、优先级等属性,同时可以设定线程的生命周期,例如设置空闲线程存活时间。 5. **Spring AOP与多线程**: Spring AOP(面向切面编程)...

    线程池顶层实现原理之线程模型,状态,执行流程,原理

    * threadFactory:线程工厂。 * handler:拒绝执行处理器。 这些参数确定了线程池的行为和性能。 结论 线程池顶层实现原理是 Java 中的线程池实现机制的核心,包括线程模型、线程状态和执行流程三个方面。理解...

    源码深度分析线程池中Worker线程的执行流程

    3. `thread`变量是Worker线程实例,由线程工厂`getThreadFactory().newThread(this)`创建,这里的`this`指的是当前的Worker实例。 在Worker类中,`run()`方法是线程执行的入口,它实际上调用的是`...

    java并发规范(线程及锁).docx

    例如,直接对`Thread`对象调用`setName()`方法,或者使用Guava库中的`ThreadFactoryBuilder`来创建具有特定命名格式的线程工厂。 2. **使用线程池**:线程池提供了更高效的线程管理,可以避免频繁创建和销毁线程的...

    java 多线程 队列工厂

    队列工厂则是实现多线程间通信和任务调度的一种设计模式,它提供了一种抽象和统一的方式来创建和管理队列实例。 ### 1. Java 多线程 多线程是指在单个程序中同时执行多个线程(任务)的能力。Java通过`Thread`类和...

    线程池管理线程demo

    如果需要更复杂的配置,如定制线程工厂、拒绝策略等,可以使用`ThreadPoolExecutor`直接创建线程池,如下: ```java int corePoolSize = 5; int maximumPoolSize = 10; long keepAliveTime = 5000L; TimeUnit ...

Global site tag (gtag.js) - Google Analytics