美文网首页
优雅的线程池

优雅的线程池

作者: Effector | 来源:发表于2018-02-27 23:32 被阅读0次

前言

在开发多线程应用的时候,通常会使用线程池来管理线程的运行。但线程池对象并不了解每个线程的业务逻辑代码,线程池很难知道池中的每个线程何时结束。甚至在关闭线程池后,还会等待池内的线程执行完,而强行关闭一直是文档规范所不推崇的。另外,如怎样让在池中排队(还未执行)的线程不要执行,也是一个麻烦的问题。


基本约定

1. 这里所指的线程池是指单线程池,也就是该线程池内任意时刻只会有一个线程在运行。如果需要扩展到多线程,则应建立多个单线程池来实现。

2. 线程池中,可能有正在运行的线程,有正在排队的线程,也可能线程池中一个线程都没有。

3. 所谓线程结束是指,线程主函数返回。如果线程内有开新的线程,那么新线程的生命周期应由线程开发者自行管理。


如何知道线程池中的某线程已结束

只需要在池中加入线程后,再加入一个线程池管理者自己的线程M,这个M线程一旦被执行,就可以知道,之前的线程已结束。

注意,加入线程时,最好要做同步操作。


如何让池中还未执行的线程不要执行

封装线程池类,让线程池的使用者只能通过特定函数添加线程。在这些特定函数里,实际上把线程放到自己的队列Q中,而不是直接放入线程池中。确保线程池中的线程运行结束(参见上节)后,再从队列Q中获取下一个需运行的线程放入池中执行。

只需要提供函数清空队列Q,就可以让队列中的线程不再得到执行。


上述线程池同时运行的线程只有一个,怎么样提供多线程能力

只需要多开设几个上述线程池就可以了,当然需要撰写代码,将队列Q中线程均匀分配到各个线程池中。

相关文章

  • 优雅的线程池

    前言 在开发多线程应用的时候,通常会使用线程池来管理线程的运行。但线程池对象并不了解每个线程的业务逻辑代码,线程池...

  • 如何优雅的关闭线程池?

    简介: 线程池是系统资源,这篇文章主要介绍如何优雅关闭线程池 相关API: Runtime.addShutdown...

  • 优雅的关闭线程池

    使shutdownNow法,可能会引起报错,使用shutdown方法可能会导致线程关闭不了。 所以当我们使shut...

  • 线程池的优雅关闭

    转自:https://www.jianshu.com/p/bdf06e2c1541 平时开发中,大家更多的关注的是...

  • 线程池的优雅关闭实践

    平时开发中,大家更多的关注的是线程池的创建、任务的提交和执行。往往会忽略线程池的关闭,甚至忘记调用shutdown...

  • 如何优雅的使用线程池

    线程池不仅在项目中是非常常用的一项技术而且在面试中基本上也是必问的知识点,接下来跟着我一起来巩固一下线程池的相关知...

  • 如何优雅的使用线程池?

    创建ThreadPoolExecutor,切记创建在类的方法之外,这样就不会调用一次方法,创建一个ThreadPo...

  • 如何优雅的使用线程池

  • java----线程池

    什么是线程池 为什么要使用线程池 线程池的处理逻辑 如何使用线程池 如何合理配置线程池的大小 结语 什么是线程池 ...

  • java线程池

    线程VS线程池 普通线程使用 创建线程池 执行任务 执行完毕,释放线程对象 线程池 创建线程池 拿线程池线程去执行...

网友评论

      本文标题:优雅的线程池

      本文链接:https://www.haomeiwen.com/subject/spdpxftx.html