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();
}
}
}

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

被折叠的 条评论
为什么被折叠?



