8.Quartz源码取经之线程池

本文探讨了为何使用线程池,特别是在多任务并发执行的场景下,线程池能有效避免频繁创建线程导致的资源浪费。接着详细讲解了Quartz框架中的线程池设计,包括线程类、线程池类、初始化过程,以及在无可用线程时如何控制任务执行。通过对Quartz线程池的工作原理理解,有助于优化并发任务的管理。
摘要由CSDN通过智能技术生成

1.为什么用线程池?

1.1 场景

有多个任务需要并发执行

1.2 解决方法

  • 方法一:给每个任务在执行时再创建新线程
  • 方法一缺点:(1)创建线程耗时(2)任务多时,线程数暴增导致CPU、内存爆掉
  • 方法二:线程池,预先建立多个线程,任务到来时,从池中挑一个线程来执行任务

2. Quartz中的线程池

2.1 线程类

//重载了Thread的run方法,执行时实际调用的是runable.run()
class WorkerThread extends Thread {
   
        private Runnable runnable = null;
        private AtomicBoolean run = new AtomicBoolean(true);
        private final Object lock = new Object();
        @Override
        public void run() {
   
            boolean ran = false;
            //run一直是true的话,就是死循环,线程不会停掉
            while (run.get()) {
   
                try {
   
                    synchronized(lock) {
   
                        //新建WorkerThread对象时,会因runable=null而一直等待
                        while (runnable == null && run.get()) {
   
                            lock.wait(500);
                        }

                        if (runnable != null) {
   
                            ran = true;
                            //因未使用start(),故不会新起线程,只会把run()当做普通方法调用
                            runnable.run();
                        }
                    }
                }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值