在实践中运用多线程

本文摘抄自《Java 多线程编程实战指南》核心篇 第四章小结

本章介绍了利用多线程实现并发计算的基本方法以及多线程编程实践中的注意事项及应对措施。


  挖掘出程序中的可并发点是实现多线程编程的目标——并发计算的前提。

  实现并发化的策略包括基于数据的分割策略和基于任务的分割策略。前者从程序处理的数据角度入手,将原始输入分解为若干规模更小的子输入,并将这些子输入指派给专门的工作者线程处理。其结果是产生若干同质的工作者线程。后者从程序的处理逻辑角度入手,将原始任务处理逻辑依照任务的资源消耗属性或者处理步骤分解为若干个子任务,并创建专门的工作者线程来执行这些子任务。其结果是产生多个相互协作的异质工作者线程。

  多线程编程实践中需要注意以下几下问题。

  • 考虑到多线程程序往往比相应的单线程程序要复杂,且未必比相应的单线程程序快,因此多线程编程的一个实施策略是考虑从单线程程序向多线程程序“进化”,而不是直接迈向“多线程”。

  • 线程数的合理设置。设置线程数的基本原则就是避免随意设置/使线程数可配置或者可以动态计算得来。设置合理的线程数需要考虑系统的资源状况(处理器数目/内存大小等)/线程所执行的任务的特性(CPU 密集型任务/I/O 密集型任务)/资源使用情况规划(CPU 使用率上限)以及程序运行过程中使用到的其他稀缺资源情况(如数据库连接/文件句柄数)等因素。

  • 多线程程序往往比相应的单线程程序产生更多的开销,且需要注意工作者线程的异常处理以及原始任务规模未知问题的应对。

本章知识结构图

文章作者: DoubleFJ
文章链接: http://putop.top/2019/07/21/Multithreading-Chapter-Four/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DoubleFJ の Blog