ThreadFactory线程工厂

看一下这个接口的源码

public interface ThreadFactory {

    /**
     * Constructs a new {@code Thread}.  Implementations may also initialize
     * priority, name, daemon status, {@code ThreadGroup}, etc.
     *
     * @param r a runnable to be executed by new thread instance
     * @return constructed thread, or {@code null} if the request to
     *         create a thread is rejected
     */
    Thread newThread(Runnable r);
}

该接口的目的是定制一个线程,可以设置线程的优先级、名字、是否后台线程、状态等。
输入:继承Runnable接口的实例对象
输出:定制的线程,如果被拒绝,则返回null;

测试:

import java.util.concurrent.*;

class Task implements Runnable {
    public void run(){
        System.out.println(Thread.currentThread().getName()+"   isDaemon:"+Thread.currentThread().isDaemon());
    }
}
public class ThreadFactoryDemo implements ThreadFactory {
    private int id = 0;
    public Thread newThread(Runnable r){
        Thread t = new Thread(r);
        t.setName("Thread-Name:" + id++);
        t.setDaemon(true);
        return t;
    }
    public static void main(String []args)throws InterruptedException{
        ExecutorService exe = new ThreadPoolExecutor(5, Integer.MAX_VALUE,
                60L, TimeUnit.SECONDS,
                new SynchronousQueue<Runnable>(),
                new ThreadFactoryDemo());
        for(int i=0;i<5;i++)
        {
            exe.execute(new Task());
        }
        exe.shutdown();
        TimeUnit.MILLISECONDS.sleep(1000);
    }
}


结果:

Thread-Name:2   isDaemon:true
Thread-Name:0   isDaemon:true
Thread-Name:1   isDaemon:true
Thread-Name:4   isDaemon:true
Thread-Name:3   isDaemon:true

我们设置了加入到线程池中每个线程的名字和是否后台线程。

线程工厂ThreadFactory)是Java中用于创建线程的一个接口,它提供了一种标准的方式来替换Thread类的默认构造方法。通过线程工厂,开发者可以定制线程的创建过程,例如设置线程的名称、优先级、是否为守护线程等属性,甚至可以创建特定的线程实现。 在Java中,线程工厂通常与线程池(ExecutorService)结合使用。当执行器(Executor)需要创建新的线程时,它会调用线程工厂的newThread方法来创建线程。这样,开发者可以利用线程工厂来实现以下功能: 1. 自定义线程属性:通过线程工厂,可以设置新创建的线程的名称、优先级或是否为守护线程等属性,使其与应用程序的需求相匹配。 2. 线程池的线程监控:自定义的线程工厂可以跟踪线程的创建和使用情况,有助于监控和调试。 3. 异常处理:在自定义线程工厂中可以添加异常处理逻辑,例如在创建线程失败时进行日志记录或执行一些清理工作。 一个简单的线程工厂实现示例如下: ```java import java.util.concurrent.ThreadFactory; public class CustomThreadFactory implements ThreadFactory { @Override public Thread newThread(Runnable r) { Thread t = new Thread(r); // 设置线程的属性 t.setName("CustomThread"); t.setDaemon(false); t.setPriority(Thread.NORM_PRIORITY); return t; } } ``` 当使用这种自定义的线程工厂线程池结合时,线程池就会使用`newThread`方法来创建线程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值