单体架构异步线程池

package com.jt.thread;

import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicLong;

public class ThreadPoolTests {
    public static void main(String[] args) {
    //1.核心线程数
    int corePoolSize = 2;
    //2.最大线程数
    int maximumPoolSize = 3;
    //3.线程最大空闲时间
    long keepAliveTime = 60;
    //4.时间单位
    TimeUnit unit = TimeUnit.SECONDS;
    //5.任务队列(阻塞式队列)
    BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(1);
    //6.定义拒绝策略(可选,常用有四种 这里是主线程调用策略 还有默认的AbortPolicy中断策略并抛出个异常,DiscardPolicy丢弃策略不抛出异常,DiscardOldestPolicy弃老策略:丢弃队列最前面的任务)
    RejectedExecutionHandler handler = new ThreadPoolExecutor.CallerRunsPolicy();
    //7.构建线程工厂(可选,最关键是要给线程一个友好的名字)
    ThreadFactory factory = new ThreadFactory() {
        //线程名前缀
        private String namePrefix = "cgb2105-Thread-";
        //构建一个线程安全的原子自增自减对象
        private AtomicLong atomicLong = new AtomicLong(1);
        @Override
        public Thread newThread(Runnable r) {   //r 为任务
            return new Thread(r,namePrefix+atomicLong.getAndIncrement());
        }
    };
    //8.创建线程池
    ThreadPoolExecutor pool = new ThreadPoolExecutor
            (corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,factory,handler);
    //9.将任务交给池中对象去执行
    pool.execute(new Runnable() {
        @Override
        public void run() {
            String tName=
                    Thread.currentThread().getName();
            System.out.println(tName+"->任务1");
            try{Thread.sleep(5000);}catch (Exception e){}
        }
    });
        pool.execute(new Runnable() {
            @Override
            public void run() {
                String tName=
                        Thread.currentThread().getName();
                System.out.println(tName+"->任务2");
                try{Thread.sleep(5000);}catch (Exception e){}
            }
        });
        pool.execute(new Runnable() {
            @Override
            public void run() {
                String tName=
                        Thread.currentThread().getName();
                System.out.println(tName+"->任务3");
                try{Thread.sleep(5000);}catch (Exception e){}
            }
        });
        pool.execute(new Runnable() {
            @Override
            public void run() {
                String tName=
                        Thread.currentThread().getName();
                System.out.println(tName+"->任务4");
                try{Thread.sleep(5000);}catch (Exception e){}
            }
        });
        pool.execute(new Runnable() {
            @Override
            public void run() {
                String tName=
                        Thread.currentThread().getName();
                System.out.println(tName+"->任务5");
            }
        });
        pool.shutdown();//不再接收任务,等现有任务执行结束将池关掉
        // pool.shutdownNow();//不再接收任务,但有可能会将现有任务也会停止


    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值