线程池创建及使用三部曲

java线程池创建及使用三部曲

java多线程技术是java编程中不可或缺的关键点,在各大互联网公司招聘线程技术是绕不过的坎,下面小编就带大家进行线程技术中线程池的创建及使用。话不多说直接上源码。

1、创建线程池,首先创建线程工厂。

public class UserThreadFactory implements ThreadFactory {
    private  final String factoryName;//定义线程工厂名称

    private AtomicInteger index=new AtomicInteger(1);//随机正整数

    /**
     * 构造方法
     * @param factoryName
     */
    public UserThreadFactory(String factoryName) {
        this.factoryName = factoryName;
    }
    /**
     *重写newThread方法(从线程工厂中返回一个线程)
     */
    @Override
    public Thread newThread(Runnable r) {
        String name=factoryName+index.getAndIncrement();//定义线程名称
        Thread thread=new Thread(null,r,name,0);//创建线程
        return thread;//返回线程
    }
}

2、创建线程池拒绝策略,拒绝策略在线程池已满的时候触发执行下一步操作。

public class RejectedHandler implements RejectedExecutionHandler {
    /**
     * 拒绝策略
     * @param r
     * @param executor
     */
    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        System.out.println("线程池已满:"+executor.toString());//具体操作由实际情况而定
    }
}

3、核心步骤,创建线程池

public class UserThreadPool  {

    /**
     * 线程池
     * @param thread
     * @param factory
     */
    public static void threadRunning(Thread thread,UserThreadFactory factory){
        //线程池缓存队列
        BlockingQueue<Runnable> queue=new LinkedBlockingDeque<>(1024);
        //拒绝策略
        RejectedHandler handler = new RejectedHandler();

        //创建线程池
        /**
         * corePoolSize:核心线程数量
         * maximumPoolSize:线程池最大容量,超过这个容量线程将被阻塞
         * keepAliveTime:当线程超过核心线程数时,空闲线程的回收等待时间
         * TimeUtil.MILLISECONDS:keepAliveTime的时间单位,(5000),TimeUtil.SECONDS(5)底层都是有 sleep()实现
         * workQueue:存放代处理任务的队列,该队列只接收Runnable接口
         * ThreadFactory:线程工厂
         * handler:当线程超过maximumPoolSize的时候触发拒绝策略
         */
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(512, 1024, 0L, TimeUnit.MILLISECONDS, queue, factory, handler);

        //运行线程
        threadPoolExecutor.execute(thread);
    }
}

线程池创建完成,下面就是简单使用线程的方法。

 public static void main(String[] args) {
        System.out.println("我是main方法,主线程");
        //创建线程工厂实例
        UserThreadFactory factory=new UserThreadFactory("测试");
        //从线程工厂创建线程
        Runnable runnable=new Runnable() {
            @Override
            public void run() {
                System.out.println("我是测试线程");
            }
        };
        Thread thread=factory.newThread(runnable);
        //使用线程池运行线程调用
        UserThreadPool.threadRunning(thread,factory);
 }

这就是线程池的创建及简单应用,后期小编会为大家分享java线程的同步机制,敬请请期待!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值