使用线程池的注意事项

  • 死锁

任何多线程程序都有死锁的风险,最简单的情形是两个线程AB,A持有锁1,请求锁2,B持有锁2,请求锁1。(这种情况在mysql的排他锁也会出现,不会数据库会直接报错提示)。线程池中还有另一种死锁:假设线程池中的所有工作线程都在执行各自任务时被阻塞,它们在等待某个任务A的执行结果。而任务A却处于队列中,由于没有空闲线程,一直无法得以执行。这样线程池的所有资源将一直阻塞下去,死锁也就产生了。

  • 系统资源不足

如果线程池中的线程数目非常多,这些线程会消耗包括内存和其他系统资源在内的大量资源,从而严重影响系统性能。

  • 并发错误

线程池的工作队列依靠wait()和notify()方法来使工作线程及时取得任务,但这两个方法难以使用。如果代码错误,可能会丢失通知,导致工作线程一直保持空闲的状态,无视工作队列中需要处理的任务。因为最好使用一些比较成熟的线程池。

  • 线程泄漏

使用线程池的一个严重风险是线程泄漏。对于工作线程数目固定的线程池,如果工作线程在执行任务时抛出RuntimeException或Error,并且这些异常或错误没有被捕获,那么这个工作线程就异常终止,使线程池永久丢失了一个线程。(这一点太有意思)

另一种情况是,工作线程在执行一个任务时被阻塞,如果等待用户的输入数据,但是用户一直不输入数

UNIX(多线程):23---线程池注意事项和常见问题相关推荐

  1. 多线程和线程池的基本知识总结

    1.多线程相关的三组概念: 1.程序和进程 1.进程(process): 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位.程序是指令.数据及其组织形式的描述,进 ...

  2. C#多线程之线程池篇2

    在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...

  3. C#多线程之线程池篇1

    在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...

  4. C++多线程以及线程池

    1 线程 1.1 简介   线程(英语:thread)是操作系统能够进行运算调度的最小单位.大部分情况下,它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程 ...

  5. Java的多线程和线程池的使用,你真的清楚了吗?

    Java的多线程和线程池的使用 多线程大大提高程序运行效率,我们在开发过程中经常会开启一个线程来执行一些费时的任务.开启一个线程有4种方式,在下面的文章我将详细的去讲解. 继承Thread 继承Thr ...

  6. 多线程之线程池-各个参数的含义- 阿里,美团,京东面试题目

    阿里的面试官问了个问题,如果corepollSize=10,MaxPollSize=20,如果来了25个线程 怎么办, 答案: 当一个任务通过execute(Runnable)方法欲添加到线程池时: ...

  7. Java多线程之线程池配置合理线程数

    Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...

  8. Java多线程之线程池的手写改造和拒绝策略

    Java多线程之线程池的手写改造和拒绝策略 目录 自定义线程池的使用 四种拒绝策略代码体现 1. 自定义线程池的使用 自定义线程池(拒绝策略默认AbortPolicy) public class My ...

  9. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解

    Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...

  10. Java多线程之线程池详解

    Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...

最新文章

  1. linux磁盘怎么分区比较好,500G的硬盘,怎么分区比较合理?
  2. iOS 网络输入流提供请求体(适用于大容量内容)
  3. vit-pytorch
  4. 多目标非支配排序遗传算法-NSGA-II(二)
  5. netty中的websocket
  6. AI算力的阿喀琉斯之踵:内存墙
  7. latex 版本控制:TexStudio/Texmaker/... + git(smartGit)
  8. c语言怎么确定输出数的坐标,c语言printf实现同一位置打印输出的实例
  9. 2021-08-17Cookie 详解
  10. Xamarin.Android 记住账号
  11. c语言编程 设计密码锁,单片机控制安全密码锁的设计(附程序,pcb,原理图)
  12. 基础知识贴----用好用活N93(完)
  13. 数据结构:利用栈实现数制转换
  14. 应用ceph文件系统存储(ceph-13.2.10)
  15. ppt(office365)之起始页、目录页、结束页界面布局技巧
  16. 橡胶支座抗压弹性模量计算公式_(完整版)橡胶支座计算
  17. 利用imu估计roll、pitch的理解
  18. isBlank与isEmpty的区别
  19. linux下格式化apfs,APFS文件系统科普贴
  20. bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积

热门文章

  1. POLLERR的故事
  2. sigprocmask 阻塞进程
  3. signal(SIGPIPE, SIG_IGN);
  4. Linux编程make命令
  5. WinCE OAL中的OEMIoControl函数
  6. WinCE6.0中应用程序如何直接访问物理空间
  7. java jni librtmp_librtmp 编译集成
  8. 无法定位程序输入点 except_软件测试中的功能测试点(三)
  9. Linux绘图函数与驱动,Linux中与驱动相关的ioctl函数
  10. 在日本山区流域使用支持向量机和 bagging、boosting 和 stacking 集成机器学习框架改进滑坡评估--文献阅读