线程池的理解

一 线程池的构成

二  线程池的执行流程 

三  线程池用的设计模式 

享元设计模式

概念 如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象。目的是提高系统性能。

当然,享元模式也借用了单例模式

享元的主要组成:

(1)享元工厂(Llibrary):用于创建具体享元类,维护相同的享元对象。当请求对象已经存在时,直接返回对象,不存在时,在创建对象。在例子中的解释就是图书馆,保存了所有的书,当学生借书时,有就拿走,没有买一本新书。这里面其实是使用了单例模式的。

(2)抽象享元(Book):定义需要共享的对象业务接口。享元类被创建出来总是为了实现某些特定的业务逻辑.

(3)具体享元(ConcreteBook):实现抽象享元类的接口,完成某一具体逻辑。在这里表示可以被借出。

四 线程池模拟实现代码:

public class ThreadPoolTest {
    public static void main(String[] args) {
        //核心线程池
        int corePoolSize=2;
        //最大容量的线程池
        int maximumPoolSize=4;
        //线程的最大空闲时间
        long keepAliveTime=30;
        //时间单位
        TimeUnit unit=TimeUnit.SECONDS;
        //任务队列
        BlockingQueue<Runnable> workQueue=new ArrayBlockingQueue<Runnable>(1);
        //定义拒绝策略
        RejectedExecutionHandler handler=
                //当池无法处理这个任务时,由任务启动方去执行任务
                new ThreadPoolExecutor.CallerRunsPolicy();
        //构建线程工厂,可以给线程起个名字
        ThreadFactory factory=new ThreadFactory() {
            //线程名前缀
            private String namePrefix="线程池-";
            //构建一个线程安全的原子自增自减对象
            private AtomicLong atomicLong= new AtomicLong(1);
            @Override
            public Thread newThread(Runnable r) {//r 为任务
                return new Thread(r,namePrefix+atomicLong.getAndIncrement());
            }
        };
        //创建线程
        ThreadPoolExecutor pool =
                new ThreadPoolExecutor
                (corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,factory,handler);
       for(int i=0;i<6;i++){
           pool.execute(new Runnable() {
               @Override
               public void run() {
                   String name = Thread.currentThread().getName();
                   System.out.println(name+"任务1");
                   try{Thread.sleep(1000);}catch (Exception e){};
               }
           });
       }

  pool.shutdown();//不再接收任务,等现有任务执行结束将池关掉
    }
}

使用了堵塞队列:满了进不去,空了取不出来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没伞的孩子努力奔跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值