线程池中你不容错过的一些细节 (2)

因为不管是学校老师,还是网上大牛讲的都是只有执行了start() 方法后操作系统才会给我们创建一个独立的线程来运行,而 run() 方法只是一个普通的方法调用。

而在线程池这个场景中却恰好就是要利用它只是一个普通方法调用

回到我在文初中所提到的:我认为线程池它就是一个调度任务的工具。

假设这里是调用的 Runnable 的 start 方法,那会发生什么事情。

如果我们往一个核心、最大线程数为 2 的线程池里丢了 1000 个任务,那么它会额外的创建 1000 个线程,同时每个任务都是异步执行的,一下子就执行完毕了

从而没法做到由这两个 Worker 线程来调度这 1000 个任务,而只有当做一个同步阻塞的 run() 方法调用时才能满足这个要求。

这事也让我发现一个奇特的现象:就是网上几乎没人讲过为什么在线程池里是 run 而不是 start,不知道是大家都觉得这是基操还是没人仔细考虑过。

总结

针对之前线上事故的总结上次已经写得差不多了,感兴趣的可以翻回去看看。

这次呢可能更多是我自己的总结,比如写一篇技术博客时如果大部分人对某一个知识点讨论的比较热烈时,那一定是作者要么讲错了,要么没讲清楚。

这点确实是要把自己作为一个读者的角度来看,不然很容易出现之前的一些误解。

在这之外呢,我觉得对于线程池把这两篇都看完同时也理解后对于大家理解线程池,利用线程池完成工作也是有很大好处的。

如果有在面试中加分的记得回来点赞、分享啊。

你的点赞与分享是对我最大的支持

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwdds.html