`

构建高性能工作线程 三 工作线程

    博客分类:
  • java
 
阅读更多

工作线程

public abstract class WorkThread implements Runnable, Serializable{
    /** 线程池的参数是否改变 */
    private boolean isPoolSizeAliveTimeModf = false;
    /** JDK 线程池 spring封装 扩展实现的线程池 */
    private MyThreadPoolTaskExecutor taskExecutor;

    /** 核心线程数 */
    private static int corePoolSize;
    /** 最大线程数 */
    private static int maximumPoolSize;
    /** 线程池维护线程所允许的空闲时间 */
    private static int keepAliveTime;

    public WorkThread(TaskExecutor taskExecutor) {
      this.taskExecutor = (MyThreadPoolTaskExecutor) taskExecutor;
    }
    
    public final void run() {
        try {
             // 如果线程池参数有变化,则重置
          if (isPoolSizeAliveTimeModf()) {
                 taskExecutor.setCorePoolSize(corePoolSize);
                 taskExecutor.setMaxPoolSize(maximumPoolSize);
                 taskExecutor.setKeepAliveSeconds(keepAliveTime);
            }
            //抽象函数,供子类实现
            doTask();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //任务工作
    public abstract void doTask() throws Exception;

   //获取缓冲队列QUEUE,用于维护监控
   public BlockingQueue getQueue() {
        return taskExecutor.getThreadPoolExecutor().getQueue();
   }

   //获取队列size,用于维护监控
   public int getQueueSize() {
      if (this.getQueue() instanceof LinkedBlockingQueue) {
         return this.getQueue().size();
      } else {
         return this.getQueue().size();
      }
   }
   //如果线程池中的参数有变化,自动调用update方法
   public void update(Observable observable, Object obj) {
       if (obj instanceof Map) {
           HashMap<String, Integer> poolMap = (HashMap<String, Integer>) obj;
           //打印 线程池  历史大小 和 要更改的大小
       corePoolSize = poolMap.get("corePoolSize");
           maximumPoolSize = poolMap.get("maximumPoolSize");
           keepAliveTime = poolMap.get("keepAliveTime");

           //一定要把值设到线程池中
       taskExecutor.setCorePoolSize(corePoolSize);
           taskExecutor.setMaxPoolSize(maximumPoolSize);
           taskExecutor.setKeepAliveSeconds(keepAliveTime);
       }
   }

   public MyThreadPoolTaskExecutor getTaskExecutor() {
      return taskExecutor;
   }
   public void setMaximumPoolSize(int maximumPoolSize) {
      this.maximumPoolSize = maximumPoolSize;
   }
   public boolean isPoolSizeAliveTimeModf() {
      return isPoolSizeAliveTimeModf;
   }
   public void setKeepAliveTime(int keepAliveTime) {
      this.keepAliveTime = keepAliveTime;
   }

}

 






分享到:
评论

相关推荐

    构建高性能C++应用:并发编程与多线程处理-.md

    深入探讨了如何利用并发编程与多线程处理来构建高性能的C++应用。文章首先介绍了并发与并行的基本概念、线程与进程的区别,以及多线程的优势与挑战。接着,详细讲解了C++中支持并发编程的核心工具,包括`std::thread...

    MFC 工作者线程 线程

    高优先级的线程更可能获得CPU资源,但过度使用可能导致系统响应变慢。 9. **线程同步对象**:`CWinApp::Lock`和`CWinApp::Unlock`方法用于控制对MFC应用单例访问,防止多线程环境下资源竞争。 在提供的压缩包文件...

    工作线程 UI线程实例

    在编程领域,尤其是在Android或Java应用开发中,工作线程(Worker Thread)和用户界面线程(UI Thread)是两个非常关键的概念。...在实际开发中,理解并熟练掌握这两者的关系对于构建高质量的应用至关重要。

    Linux多线程高并发服务器

    在IT行业中,Linux多线程高并发服务器设计是构建高性能网络服务的核心技术之一。这种设计模式主要用于处理大量的并发连接请求,充分利用系统资源,提供高效稳定的服务。以下将详细阐述相关知识点: 1. **多线程**:...

    MFC用户界面线程与工作者线程

    总结起来,MFC中的用户界面线程与工作者线程是构建高效、响应式应用程序的关键。UI线程专注于用户交互,保持界面流畅;工作者线程则负责处理耗时任务,避免阻塞UI。通过合理地分配任务和使用同步机制,可以充分利用...

    workquere工作队列 多线程

    工作队列(Work Queue)是一种在多线程编程中广泛使用的模式,用于协调并发任务的执行,优化系统资源的利用并提高程序的响应速度。在C#中,工作队列通常用于将耗时的任务放入队列,然后由一组后台线程来处理这些任务...

    构建线程安全应用程序

    比如,Java的ConcurrentHashMap是一个线程安全的哈希表实现,它通过分段锁机制来实现线程安全,并提供较高的并发性能。并发集合类通常提供了比它们的同步对应物更好的性能,且更容易使用。 在编写线程安全代码时,...

    线程异步工作,当一个线程结束时异步通知另一线程

    总之,线程异步工作和线程间的异步通知是多线程编程中的重要概念,通过合理使用C++11及更高版本提供的并发工具,可以构建高效且响应迅速的多线程应用程序。正确理解和运用这些工具,能够帮助开发者优化系统性能,...

    高并发多线程处理demo-java.rar

    这个"高并发多线程处理demo-java.rar"压缩包提供了一个实际的Java实现,展示了如何构建一个并发队列来接收数据,并通过多线程进行处理。以下是对这个实例中的知识点进行的详细解释: 1. **Java多线程**:Java通过`...

    基于Linux系统的构建高性能服务器的研究.pdf

    【基于Linux系统的构建高性能服务器的研究】这篇论文主要探讨了如何在Linux环境下建立高效能的服务器,涉及的关键技术包括事件处理模式、并发模式以及资源管理策略。以下是对这些知识点的详细阐述: 1. **事件处理...

    多线程精品资源--高并发-高可靠-高性能three-high-import导入系统-高并发多线程进阶.zip

    通过对这些知识点的学习和实践,你将能够掌握如何在实际项目中运用多线程技术来构建高并发、高可靠、高性能的系统。这份压缩包资源应该提供了丰富的实例、代码示例、讲解文档,帮助你深入理解和应用这些概念。记得...

    构建高性能服务(一)ConcurrentSkipListMap和链表构建高性能Java Memcached

    在构建高性能服务的过程中,数据结构和算法的选择至关重要。本文我们将探讨`ConcurrentSkipListMap`和如何利用链表来优化Java Memcached实现。`ConcurrentSkipListMap`是Java并发编程中的一个强大工具,而链表则常...

    三缓冲区 多线程处理,抓包例子

    在Linux环境中,利用这些技术可以构建高性能的网络监控工具,例如网络安全分析、流量统计或协议分析。通过合理地设计缓冲区策略和多线程模型,可以有效地平衡数据包的处理速度与保持数据顺序的需求,同时充分利用...

    Go-golang-set-Go的线程安全的和非线程安全的高性能集

    `golang-set`库提供了一种实现,包括线程安全和非线程安全的高性能集,非常适合在Go的并发环境中使用。 首先,我们要理解什么是线程安全和非线程安全。线程安全指的是在多线程环境下,一个函数或方法在同一时刻可以...

    多线程测试(是多线程的测试,对学习多线程的朋友有用)

    在编程领域,多线程是一种常见的技术,它允许程序同时执行多个任务,从而提高系统效率和响应速度。...通过深入理解C#的多线程机制,并利用各种测试工具和方法,开发者可以构建出强大且可靠的多线程应用程序。

    JAVA线程(第三版)

    线程在现代计算机编程中扮演着至关重要的角色,尤其是在并发处理和高性能应用中。Java以其强大的线程支持,成为并发编程的首选语言之一。本节将围绕书中的核心主题——线程死锁和线程同步展开讨论。 **线程死锁**是...

    c++ 多线程线程池 demo

    OEasyPool-1.0可能是第三方库或个人实现的一个线程池实例,用于演示如何在C++中构建这样的机制。 线程池的基本组件包括: 1. 工作线程:这些是预先创建的线程,它们等待来自线程池的任务。 2. 任务队列:所有待...

    C#多线程消息处理例子

    在C#编程中,多线程消息处理是一个关键的领域,尤其在开发高效、响应迅速的应用程序时。本文将深入探讨“C#多线程消息处理例子”中的核心概念,...理解并掌握这些概念对于编写高性能、响应迅速的C#应用程序至关重要。

Global site tag (gtag.js) - Google Analytics