美文网首页
线程池的扩展

线程池的扩展

作者: 即墨灯火 | 来源:发表于2019-01-02 02:26 被阅读2次

ThreadPoolExecutor是一个可以扩展的线程池,其提供了beforeExecute(), afterExecute()与terminated()三个接口对线程池进行控制。

    final void runWorker(Worker w) {
        Thread wt = Thread.currentThread();
        Runnable task = w.firstTask;
        w.firstTask = null;
        w.unlock(); // allow interrupts
        boolean completedAbruptly = true;
        try {
            while (task != null || (task = getTask()) != null) {
                w.lock();
                // If pool is stopping, ensure thread is interrupted;
                // if not, ensure thread is not interrupted.  This
                // requires a recheck in second case to deal with
                // shutdownNow race while clearing interrupt
                if ((runStateAtLeast(ctl.get(), STOP) ||
                     (Thread.interrupted() &&
                      runStateAtLeast(ctl.get(), STOP))) &&
                    !wt.isInterrupted())
                    wt.interrupt();
                try {
                    beforeExecute(wt, task); //钩子1
                    try {
                        task.run();
                        afterExecute(task, null); //钩子2-NORMAL
                    } catch (Throwable ex) {
                        afterExecute(task, ex);  //钩子2-THROWABLE
                        throw ex;
                    }
                } finally {
                    task = null;
                    w.completedTasks++;
                    w.unlock();
                }
            }
            completedAbruptly = false;
        } finally {
            processWorkerExit(w, completedAbruptly);
        }
    }

在ThreadPoolExecutor中,beforeExecute()与 afterExecute()默认为空。在实际场景中,通过继承ThreadPoolExecutor,或是在声明时进行重载,可以对其进行扩展一实现对线程池运行状态的跟踪。这两个钩子函数的提供有助于应用程序的调试与诊断。

相关文章

  • ExecutorService

    ExecutorService扩展和实现Executor。 java 线程池的5种状态 RUNNING 线程池...

  • kotlin 线程切换工具

    这里先不说协程,前面讲过java线程池,kotlin扩展函数。 java 线程池Executorskotlin 扩...

  • Java多线程之线程池深入讲解

    1 线程池介绍 1.1 线程池概念 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Jav...

  • 线程池的扩展

    ThreadPoolExecutor是一个可以扩展的线程池,其提供了beforeExecute(), afterE...

  • Tomcat默认线程池

    Tomcat扩展了原生的Java线程池,来满足Web容器高并发的需求。 简单来说,Tomcat 自定义线程池继承了...

  • 10、Tomcat优化

    1、Tomcat如何扩展Java线程池? 通过比较FixedThreadPool和CachedThreadPool...

  • springboot线程池应用配置

    springboot 线程池配置 以及扩展 https://www.cnblogs.com/pejsidney...

  • Java Executors线程池入门

    在Java5的更新中,Sun对Java线程的类库做了大量的扩展,其中线程池就是其中之一。除了线程池之外,还有很多跟...

  • JAVA基础之并发

    1、概述 Java5中对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还...

  • 23.Dubbo线程池策略

    此处的线程池就是上一章说的业务线程池,Dubbo对此也提供了一个ThreadPool的扩展SPI接口 FixedT...

网友评论

      本文标题:线程池的扩展

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