`
qingwei201314
  • 浏览: 168241 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring service中增加线程池

 
阅读更多

@Service("codBillingSyncService")
public class CodBillingSyncServiceImpl implements ICodBillingSyncService {

/**
  * 用于管理线程的线程池
  */
 static Integer corePoolSize = Integer.parseInt(Property.getProperty("COD_TO_BIL_COREPOOLSIZE"));
 static Integer maximumPoolSize = Integer.parseInt(Property.getProperty("COD_TO_BIL_MAXIMUMPOOLSIZE"));
 static Integer keepaliveTime = Integer.parseInt(Property.getProperty("COD_TO_BIL_KEEPALIVETIME"));
 static Integer workqueueSize = Integer.parseInt(Property.getProperty("COD_TO_BIL_WORKQUEUESIZE"));
 private static ThreadPoolExecutor exec = new ThreadPoolExecutor(
   corePoolSize, maximumPoolSize, keepaliveTime,
   TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(
     workqueueSize), new ThreadPoolExecutor.CallerRunsPolicy());

 

@Override
 public void sendCodInfoToBillingReal(final OfflineBusiness business,
   final BusinessTypeToBil bt, final ReceiveTypeToBil rt,
   final TradeTypeToBil tt) {
  final CodToBil ctb = OrderUtils.getCodToBil(business, bt, rt, tt);
  ctb.setSendStatus(SendStatus.N);
  codBillingSyncService.createCodToBil(ctb);
  
  // 如果线程池未满,或缓存队列未满,则执行以下代码.
  synchronized (exec) {
   if (exec.getPoolSize() < exec.getMaximumPoolSize() || exec.getQueue().size() < workqueueSize) {
    // 执行线程
    exec.execute(new Runnable() {
     @Override
     public void run() {
      boolean f = false;// 发送是否成功的标志位
      CodTradeItem cti = null;
      // 发送MQ消息
      try {
       cti = OrderUtils.getCodTradeItem(ctb);
       codBillingSyncService.sendCodInfoToBillingReal(cti);
       f = true;
      } catch (Exception e) {
       logger.error("sendCodCancelInfoToBillingReal error: ", e);
      }
      // 新增相应的Cod入Bil记录
      try {
       if (ctb != null) {
        if (f) {
         //更新状态
         codBillingSyncService.updateSendStatus(ctb.getId(), SendStatus.Y);
        }
       }
      } catch (Exception e) {
       logger.error("createCodToBil error: ", e);
      }
     }
    });
   }
  }
 }

}

分享到:
评论

相关推荐

    Spring Boot 自定义异步线程池的两种方式Demo

    在Spring Boot应用中,我们经常需要处理大量的并发请求,这时自定义异步线程池就显得尤为重要。异步处理能够提高应用的响应速度,避免主线程阻塞,从而提升系统性能。本文将详细介绍两种在Spring Boot中实现自定义...

    Spring Boot使用Spring的异步线程池的实现

    核心线程数是指线程池中最少的线程数,最大线程数是指线程池中最多的线程数,队列最大线程数是指线程池中队列的最大线程数。 使用 @Async 注解 在 Spring 中,我们可以使用 @Async 注解来将某个方法异步地放到另外...

    springmvc配置线程池Executor做多线程并发操作的代码实例

    在添加了线程池Executor的配置后,我们可以在Controller或Service类中使用@Resource注解来注入线程池Executor,以便在业务逻辑中使用线程池进行并发操作。例如: ```java @Controller public class IndexController ...

    JDK线程池和Spring线程池的使用实例解析

    Spring线程池是Spring框架中的一个线程池实现,它提供了一个TaskExecutor接口,该接口提供了execute、submit等方法来管理线程池。Spring线程池可以通过@Configuration和@EnableAsync注解来配置。 在使用Spring...

    Spring XML配置的12个技巧

    Spring XML配置是Spring框架中的一种常见方式,用于定义和管理应用程序中的bean及其依赖关系。以下是对Spring XML配置的12个技巧的详细说明: 1. 避免使用自动装配:Spring提供了自动装配功能,通过匹配bean属性或...

    Spring Boot 线程池的创建、@Async 配置步骤及注意事项.docx

    在Spring Boot应用中,使用线程池和异步处理是提高系统并发性能和响应速度的重要手段。`@Async`注解是Spring提供的一个特性,用于标记方法为异步执行,这样可以避免主线程等待耗时的操作,提高系统效率。本文将详细...

    SpringBoot连接PostgreSql三层架构实现增改删

    在SpringBoot应用中,这部分可以通过Service层实现。 - **数据访问层(Data Access Layer)**:与数据库交互,负责数据的存取。MyBatis在这里起到关键作用,通过Mapper接口与SQL映射文件实现SQL的执行。 4. **...

    Spring中定时任务

    4. 编写定时任务类,可以是普通的Java类,通过`@Component`或`@Service`注解将其纳入Spring管理,然后使用`@Scheduled`或实现`Job`接口。 5. 如果使用Quartz,还需要创建`Job`类,定义具体的业务逻辑,并创建对应的`...

    spring boot注解事务+多线程

    在Spring Boot应用中,事务管理和多线程是两个非常关键的特性,特别是在处理复杂的业务逻辑时。本示例将深入探讨如何使用注解来实现事务控制以及如何在Spring Boot中运用多线程。 首先,让我们关注"注解事务"。在...

    spring boot使用自定义配置的线程池执行Async异步任务

    在 Spring Boot 中执行异步任务时,默认情况下使用的是默认的线程池,但是,在实际项目中,我们可能需要根据项目的需求来定制自己的线程池。下面将介绍如何在 Spring Boot 中使用自定义配置的线程池执行 Async 异步...

    关于Spring中@Async注解使用

    Spring 中默认创建 SimpleAsyncTaskExecutor 线程池,但并不推荐使用这个默认线程池。SimpleAsyncTaskExecutor 线程池的弊端在于,容易造成 OOM 问题,因为程序每次请求线程资源,SimpleAsyncTaskExecutor 线程池...

    spring 的详细使用

    Spring 提供了一系列注解,如 @Component、@Service、@Repository 和 @Controller,用于组件扫描和依赖注入。@Autowired 注解用于自动装配依赖,@Qualifier 用于指定注入的bean。此外,还有 @PostConstruct 和 @...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    spring TaskExecutor.docx

    Spring的TaskExecutor是Java线程池抽象的一个重要组成部分,它为开发者提供了一种在Spring框架内使用线程池的方式,而无需直接依赖于特定的Java版本或Java EE环境中的线程池实现。TaskExecutor接口的设计使得在不同...

    线程中获取spring 注解bean

    首先,Spring的注解主要分为三类:配置注解(如@Configuration)、元数据注解(如@Component、@Service、@Repository和@Controller)和注入注解(如@Autowired、@Value)。这些注解使得我们可以在不编写XML配置的...

    Spring3.2异步处理http请求

    `TaskExecutor`是Spring的核心组件,负责线程池的管理,用于执行异步任务。 ```java @Configuration @EnableAsync public class AsyncConfig implements AsyncConfigurer { @Override public Executor ...

    maven管理的Spring多线程任务demo

    通过学习这个示例,开发者可以更好地理解如何在Spring中配置和使用线程池,从而高效地处理并发任务,提高应用程序的性能。这个项目的源代码可以在`Spring_ThreadPoolExecutor`这个压缩包中找到,供学习和参考。

    cxf+spring实现webservice

    在IT行业中,开发Web服务是常见的需求,而CXF和Spring框架的结合为开发者提供了一种高效、灵活的方式来实现Web Service。本篇将深入探讨如何利用CXF和Spring来创建、部署和消费Web Service。 CXF,全称CXF Commons ...

    spring job

    Spring Job,通常指的是Spring框架中的任务调度模块,用于在特定时间执行一次或重复性的任务。在Spring中,我们可以使用Spring Batch、Spring Integration或是Spring Task来实现定时任务。本篇文章将详细探讨Spring ...

Global site tag (gtag.js) - Google Analytics