美文网首页
优雅的线程池

优雅的线程池

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

    前言

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


    基本约定

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

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

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


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

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

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


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

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

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


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

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

    相关文章

      网友评论

          本文标题:优雅的线程池

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