ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

区分Java创建线程池、多线程

区分Java创建线程池、多线程

多线程是并发执行的能力;线程池是管理线程的容器,用来复用线程、避免频繁创建销毁线程。

上面的东西看不懂,本质还是对线程没有足够了解,任务执行在哪其实自己都不知道:

//你熟悉的: public void issue() { doA(); // 当前线程一步一步执行 doB(); doC(); }

谁调用issue(),谁的线程就一行行跑doA->doB->doC。比如 Tomcat 收到 HTTP 请求,就派一个http-nio-8080-exec-1线程来跑你的Controller方法。你打个断点看线程名,就是这个。

缺点:doB要 2 秒,老板(这个请求线程)就卡 2 秒,啥也干不了。

这时候就可以用到线程池了:

你项目里的ThreadPoolTaskExecutor就是一个包工头,手下养着一批工人(线程)+ 一个待办箱(BlockingQueue)。

heavyPool.submit(() -> processChunk(chunk)); // 1. 把任务包成 Runnable 扔进队列

就(排队)能让线程池指认线程去干活了(这就是任务进入到到线程的入口)

但这只是多线程,还有的地方用到的是多线程池,其实道理是一样的,线程池里面的队列也是要排队的,本质都是把任务分开,不管是分到不同的线程还是不同线程池的队列

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进