`

构建高性能工作线程 一 扩展 Spring 线程池

    博客分类:
  • java
 
阅读更多

扩展 Spring 线程池

/**
扩展SPRING 2.0的threadPooltaskExecutor
提供返回theadPoolexuecutor的引用,用于实时调整CorePoolSize、MaximumPoolSize、KeepAliveTime三个参数。
*/
public class MyThreadPoolTaskExecutor implements SchedulingTaskExecutor,Executor, InitializingBean, DisposableBean {
    //核心线程池大小    
    private int corePoolSize;
    //最大线程池大小  
    private int maxPoolSize;
    //线程保持活动时间
    private int keepAliveSeconds;
    //缓冲队列大小
   private int queueCapacity;
    //线程池名称
   private String threadPoolName;
    //thread 工厂
   private ThreadFactory threadFactory;
    //未执行任务的接口
   private RejectedExecutionHandler rejectedExecutionHandler;
    //jdk 线程池执行器
   private ThreadPoolExecutor executorService;
    //用于线程同步对象
   private final Object poolSizeMonitor = new Object();
    //MAP 用于管理所有线程池
   private static ConcurrentHashMap threadPoolMap = new 
                 ConcurrentHashMap <String,ThreadPoolExecutor>();

    //默认构造函数
    public MyThreadPoolTaskExecutor() {
         corePoolSize = 1;
         maxPoolSize = 2147483647;
         keepAliveSeconds = 60;
         queueCapacity = 2147483647;
         threadFactory = Executors.defaultThreadFactory();
         rejectedExecutionHandler = new 
                 java.util.concurrent.ThreadPoolExecutor.AbortPolicy();
         threadPoolName ="";
    }

    //创建缓冲队列
    protected BlockingQueue createQueue(int queueCapacity) {
        if (this.queueCapacity > 0)
            return new LinkedBlockingQueue(this.queueCapacity);
        else
            return new SynchronousQueue();
    }
 
   //线程池执行方法
   public void execute(Runnable task) {
         Assert.notNull(executorService,"ThreadPoolTaskExecutor not    initialized");
         executorService.execute(task);
   }

   //SPRING 线程池方法扩展,返回线程池对象用于实时调整CorePoolSize、
   //MaximumPoolSize、KeepAliveTime三个参数。 
    public ThreadPoolExecutor getThreadPoolExecutor() throws IllegalStateException {
      Assert.state(this.executorService != null, "ThreadPoolTaskExecutor not initialized");
      return this.executorService;
   }
   public void setCorePoolSize(int corePoolSize) {
      synchronized (this.poolSizeMonitor) {
         this.corePoolSize = corePoolSize;
         if (this.executorService != null) {
               this.executorService.setCorePoolSize(corePoolSize);
         }
      }
   }
   public int getCorePoolSize() {
      synchronized (this.poolSizeMonitor) {
         return this.executorService.getCorePoolSize();
      }
   }
   public void setMaxPoolSize(int maxPoolSize) {
      synchronized (this.poolSizeMonitor) {
         this.maxPoolSize = maxPoolSize;
         if (this.executorService != null) {
            this.executorService.setMaximumPoolSize(maxPoolSize);
         }
      }
   }
   public int getMaxPoolSize() {
      synchronized (this.poolSizeMonitor) {
         return this.executorService.getMaximumPoolSize();
      }
   }
   public void setKeepAliveSeconds(int keepAliveSeconds) {
      synchronized (this.poolSizeMonitor) {
         this.keepAliveSeconds = keepAliveSeconds;
         if (this.executorService != null) {
            this.executorService.setKeepAliveTime(keepAliveSeconds,TimeUnit.SECONDS);
         }
      }
   }

   public int getKeepAliveSeconds() {
      synchronized (this.poolSizeMonitor) {
         return this.keepAliveSeconds;
      }
   }

   public void setQueueCapacity(int queueCapacity) {
      this.queueCapacity = queueCapacity;
    }

   public void setThreadFactory(ThreadFactory threadFactory) {
      this.threadFactory = threadFactory == null ? Executors
.defaultThreadFactory() : threadFactory;
   }

   public void setRejectedExecutionHandler(
      RejectedExecutionHandler rejectedExecutionHandler) {
         this.rejectedExecutionHandler = ((RejectedExecutionHandler)(rejectedExecutionHandler == null ? 
((RejectedExecutionHandler) (new java.util.concurrent.ThreadPoolExecutor.AbortPolicy()))
: rejectedExecutionHandler));
      }

}

 

分享到:
评论

相关推荐

    java简单分布式架构,多个数据源,线程池多线程访问

    在IT行业中,分布式架构是一种常见的解决方案,特别是在大数据处理和高并发场景下,它能有效提升系统的性能和可扩展性。本项目围绕“Java简单分布式架构,多个数据源,线程池多线程访问”这一主题展开,旨在通过利用...

    基于MINA构建高性能的NIO应用

    ### 基于MINA构建高性能的NIO应用 #### 概述 MINA作为一款优秀的客户端/服务器架构下的Java服务器框架,凭借其强大的功能和灵活性,在开发高性能网络应用程序方面表现突出。本文将深入探讨MINA的核心概念、优势...

    Spring提供的线程池支持[借鉴].pdf

    总的来说,Spring的线程池支持和任务调度为开发者提供了强大的工具,帮助他们构建可扩展、高性能且易于管理的企业级应用。通过`TaskExecutor`和`ThreadPoolTaskScheduler`,开发者可以在不牺牲灵活性的前提下,确保...

    自己实现的 ActiveMQ 多线程客户端 包含生产消息客户端和消费者消息客户端

    ActiveMQ 是一个开源的消息中间件,它遵循开放消息模型(JMS)标准,提供高性能、高可用性和可扩展性的消息传递服务。在这个项目中,我们看到的是一个自己实现的 ActiveMQ 客户端,它特别关注多线程的实现,这在处理...

    springMVC+多线程+kafka的 demo基于maven

    在本项目中,我们探索了如何将Spring MVC框架与多线程、线程池和Apache Kafka集成,构建一个高效的数据处理系统。以下是关于这些技术及其整合的详细知识点: 1. **Spring MVC**: - Spring MVC是Spring框架的一个...

    JAVA高性能高并发服务器架构pdf文档视频资源

    在IT行业中,Java是一种广泛应用的编程语言,尤其在构建高性能、高并发的服务器架构方面具有显著优势。本资源集合包含了关于“JAVA高性能高并发服务器架构”的PDF文档和视频,旨在帮助开发者深入理解如何利用Java...

    Socket一对一,一对多多线程

    总的来说,"Socket一对一,一对多线程"是网络编程中常见的模式,通过Java的Socket和多线程技术,我们可以构建出高效、可扩展的网络服务。结合Spring框架,可以进一步提升开发效率和应用性能。而源码分析和实践操作将...

    Spring Boot中配置定时任务、线程池与多线程池执行的方法

    在Spring Boot应用中,我们可以利用其提供的功能来配置和管理定时任务、线程池以及多线程池执行。这些配置对于构建高效、可扩展的应用至关重要,尤其是在处理并发和定时任务调度时。 首先,我们来看看如何配置基础...

    spring boot《Java课程》多线程教学演示系统(011733)

    在本课程中,"Spring Boot《Java课程》多线程教学演示系统(011733)",我们将深入探讨Java编程语言的核心特性之一——多线程,并结合Spring Boot框架构建一个实际的教学演示系统。这个系统将帮助我们理解如何在现代...

    Springboot Druid多数据源 多线程

    本项目正是以此为目标,结合Spring Boot和Druid,构建了一个能够同时操作两种不同类型数据库的示例。 首先,Spring Boot的多数据源配置是通过Spring的@Configuration和@Bean注解来实现的。每个数据源都会被定义为一...

    利用Java开发高性能、高并发Web应用

    在Java开发领域,构建高性能、高并发的Web应用是一项核心任务。这涉及到多个技术层面的综合运用,包括但不限于系统架构设计、线程管理、数据访问优化、缓存策略、负载均衡以及性能监控等。以下是一些关键的知识点,...

    软件工程师的学习笔记,包含网络、操作系统、设计模式、JVM、多线程与高并发、Spring、MySQL......zip

    7. **MySQL数据库**:MySQL是最常用的开源关系型数据库之一,学习其SQL语法、索引优化、事务处理、存储引擎、性能监控和调优等知识,对于构建高性能、高可用的数据存储系统至关重要。 以上各知识点的学习和掌握,将...

    java_如何利用Java开发高性能、高并发Web应用

    在Java世界中,开发高性能、高并发的Web应用程序是一项关键任务,这关乎到系统的稳定性、扩展性和用户体验。本文将深入探讨如何借助Java技术栈来实现这一目标。 首先,选择合适的框架至关重要。Spring Boot是一个...

    Redis、Spring、RabbitMQ、Java线程、Mybatis、HashMap、JVM、MySQL相关问题的实例代码

    Redis是高性能的键值数据库,常用于数据缓存、分布式锁和消息中间件等场景。在Redis中,你可以存储字符串、列表、集合、哈希表和有序集合等多种数据结构,并利用其原子操作来保证数据的一致性。例如,你可以用`SET`...

    基于spring的Mina框架

    Mina框架是一款高性能、轻量级的网络通信框架,主要应用于开发基于TCP和UDP的网络应用。它提供了一种简单而强大的编程模型,使得开发者能够快速构建出稳定且高效的网络服务。在Spring框架的支持下,Mina的使用变得...

    基于Java的高性能、支持免费http代理池、支持横向扩展、分布式爬虫项目.zip

    总结,这个Java实现的项目为大规模的网络爬虫工作提供了高性能、可扩展的解决方案,通过代理IP池解决了IP限制问题,采用分布式架构保证了系统的稳定性和高吞吐量,是企业级网络爬虫项目的优秀实践。

    基于Spring打造简单高效通用的异步任务处理系统

    在构建一个基于Spring的简单高效通用异步任务处理系统时,我们的主要目标是实现轻量级、简单、高效、通用、高扩展性和高可靠性的解决方案。在这个系统中,我们将利用Spring框架的功能,如Job调度和线程池封装,以及...

    征服 Kestrel + XMemcached + Spring TaskExecutor

    这些技术都是在构建高性能、可扩展的分布式系统中常用的工具。 首先,Kestrel是一个开源的、基于内存的分布式消息队列系统,它主要由Twitter开发并维护。Kestrel以其高吞吐量和低延迟而著名,被广泛用于构建实时...

    Java高并发高性能分布式框架从无到有微服务架构设计.docx

    总结起来,构建Java高并发高性能分布式框架和微服务架构,需要深入了解和运用包括但不限于Spring框架、线程池、NIO、缓存策略、Dubbo、Zookeeper、Spring Cloud、数据一致性模型以及CI/CD等技术。通过合理的设计和...

    如何利用Java开发高性能、高并发Web应用

    以上是构建高性能、高并发Java Web应用的核心知识点。通过合理运用这些技术和工具,可以有效地提升系统的吞吐量和响应速度,同时保证系统的稳定性和可扩展性。在实际开发中,应根据项目需求灵活选择并整合这些技术,...

Global site tag (gtag.js) - Google Analytics