`
jerome0815
  • 浏览: 11148 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

结合springMVC使用ExecutorService多线程处理

阅读更多
package com.qyedi.module.order.service;

import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.google.common.collect.Lists;
import com.qyedi.base.model.order.OrderAdjustVO;
import com.qyedi.base.model.order.OrderVO;
import com.qyedi.module.order.domain.OrderDisplay;

/**
 * @description java线程池测试服务实现类
 * @author jerome
 * @date 2016年2月16日
 * @company qingyun
 * @copyright copyright (c) 2015
 */
@Service
public class ExcutorTestService implements IExcutorTestService {
	
	private static final Logger log = LoggerFactory.getLogger(ExcutorTestService.class);
	
	private static final int THREADNUM = 2;
	
	private ExecutorService threadPool;
	
	@PostConstruct
	public void init(){
		this.threadPool = Executors.newFixedThreadPool(THREADNUM);
		log.info("ExcutorTestService.init finished……");
	}
	
	@PreDestroy
	public void destroy(){
		threadPool.shutdown();
		log.info("ExcutorTestService.destroy finished……");
	}

	@Override
	public void excute(List<OrderDisplay> orderList) {
		
		List<FutureTask<OrderAdjustVO>> futureTaskList = Lists.newArrayList();
		
		for(final OrderVO order : orderList){
			FutureTask<OrderAdjustVO> futureTask = new FutureTask<OrderAdjustVO>(new Callable<OrderAdjustVO>() {
				@Override
				public OrderAdjustVO call() throws Exception {
					double num = Math.random();
					log.info("这里做数据持久化  begin call order : " + order.getOrderId() + " num :" + num);
					Thread.sleep(1000);
					OrderAdjustVO orderAdjustVO = new OrderAdjustVO();
					log.info("这里做数据持久化  end call order : " + order.getOrderId() + " num :" + num);
					return orderAdjustVO;
				}
			});
			futureTaskList.add(futureTask);
			threadPool.submit(futureTask);
		}
		/*  这里会线程阻塞
		for (FutureTask<OrderAdjustVO> futureTask : futureTaskList) {
			double num = Math.random();
			try {
				log.info("遍历futureTask……begin " + num);
				futureTask.get();
				log.info("遍历futureTask……end " + num);
			} catch (InterruptedException | ExecutionException e) {
				log.info("@生成报价记录失败:" + e, e);
				throw new ServiceException("生成报价记录失败!");
			}
		}
		*/
		log.info("service方法调用完成,主线程……");
	}

}
分享到:
评论

相关推荐

    SpringMVC简介与多线程解决方案

    通过这种方式,SpringMVC与多线程结合,可以优化复杂的Web应用程序,提升并发处理能力,为高并发场景提供更佳的性能表现。在实际项目中,还需要根据业务需求和系统资源进行合理的线程管理和优化。

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

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

    springmvc+spring线程池处理http并发请求数据同步控制问题

    同时,Spring框架提供的线程池功能则可以帮助我们优化多线程环境下的性能,特别是处理并发请求时。在这个主题中,我们将深入探讨如何利用Spring MVC与Spring线程池来有效地管理并发请求,并解决数据同步控制问题。 ...

    springMVC+rest+threadpool

    线程池是一种多线程编程中的管理策略,用于有效地控制运行的线程数量。在高并发环境下,创建和销毁线程是昂贵的操作,线程池可以预先创建一定数量的线程,当有新的任务需要执行时,从池中获取空闲线程,任务完成后...

    java面试题,ava核心知识 集合框架、JVM机制、多线程与并发框架、网络协议、SSM框架、MySQL、分布式、微服务等

    3. **多线程与并发框架**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口、ExecutorService和Future。并发框架如Concurrent包中的工具类(Semaphore、CyclicBarrier、CountDownLatch、Exchanger)用于...

    Java面试题线程部分.docx

    1. 临界区:通过控制多线程对代码段的访问顺序。 2. 互斥对象:使用synchronized关键字实现,确保同一时刻只有一个线程访问对象。 3. 信号量:Semaphore类用于控制同时访问特定资源的线程数量。 4. 事件对象:使用...

    java并发工具类

    Java并发工具类是Java平台提供的一系列用于处理多线程并发问题的类和接口,它们在`java.util.concurrent`包中。并发问题主要包括资源竞争、死锁、活锁以及饥饿等,合理使用并发工具可以有效地提高程序的并发性能并...

    基于SSM医院排队叫号系统.zip

    6. **多线程技术**:在处理多个叫号请求时,系统可能需要使用多线程来并发处理,确保叫号过程的及时性。Java的并发库提供了丰富的工具,如ExecutorService,可以有效地管理线程池,提高系统性能。 7. **消息队列**...

    高并发、大数据企业源码

    1. **Java源码**:Java是企业级应用的首选编程语言,其强大的多线程能力使得处理高并发场景变得可能。Java提供了`java.util.concurrent`包,包含了丰富的并发工具类,如`ExecutorService`、`Semaphore`、`...

    Java面试题整理

    在多线程环境下,为了保证共享资源的安全访问,可以使用synchronized关键字、显式锁、原子变量、并发集合类等技术。除了synchronized,还可以使用CAS操作和锁机制来实现线程安全。 ### Volatile关键字 volatile...

    shopping.zip

    4. **Java高并发API**:标签中提到的"java高并发api"可能是指Java中处理多线程和并发操作的API,如`java.util.concurrent`包下的工具类,如ExecutorService、Semaphore、CountDownLatch等。这些工具帮助开发者有效地...

    公司级代码javaSE_EE源代码(三年工作经验)

    3. 多线程:线程的创建与管理,同步机制(synchronized、Lock),并发工具类(ExecutorService、CountDownLatch、CyclicBarrier等)的使用。 4. I/O流:文件操作、网络通信、对象序列化等涉及流的场景。 5. 异常处理...

    大厂必学BAT面试题汇总及详解

    Java中的volatile和ThreadLocal都是用于处理多线程环境下的数据同步问题。volatile确保了变量在所有线程间可见,但不保证原子性。ThreadLocal为每个线程提供独立的变量副本,避免了共享数据的冲突,但过度使用可能...

    传智播客java就业班全部PPT

    - **线程池**:理解ExecutorService和ThreadPoolExecutor,优化多线程程序的性能。 4. **I/O流** - **字节流与字符流**:理解二进制数据和文本数据的读写方式。 - **缓冲区流**:提高数据传输效率,减少磁盘操作...

    java详细的代码全集

    4. **多线程**:线程的创建、同步控制(synchronized、wait/notify等)和线程池。 5. **反射机制**:在运行时动态获取类信息并操作对象。 接着,我们关注到标签中有"java高并发api",这可能包括: 1. **并发控制**...

    java开发实战经典笔记整理

    6. **多线程** - **线程的创建**:通过实现Runnable接口或继承Thread类创建线程。 - **线程同步**:synchronized关键字、wait()、notify()和notifyAll()方法的应用。 - **线程池**:ExecutorService和...

Global site tag (gtag.js) - Google Analytics