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与多线程结合,可以优化复杂的Web应用程序,提升并发处理能力,为高并发场景提供更佳的性能表现。在实际项目中,还需要根据业务需求和系统资源进行合理的线程管理和优化。
在本项目中,我们探索了如何将Spring MVC框架与多线程、线程池和Apache Kafka集成,构建一个高效的数据处理系统。以下是关于这些技术及其整合的详细知识点: 1. **Spring MVC**: - Spring MVC是Spring框架的一个...
同时,Spring框架提供的线程池功能则可以帮助我们优化多线程环境下的性能,特别是处理并发请求时。在这个主题中,我们将深入探讨如何利用Spring MVC与Spring线程池来有效地管理并发请求,并解决数据同步控制问题。 ...
线程池是一种多线程编程中的管理策略,用于有效地控制运行的线程数量。在高并发环境下,创建和销毁线程是昂贵的操作,线程池可以预先创建一定数量的线程,当有新的任务需要执行时,从池中获取空闲线程,任务完成后...
3. **多线程与并发框架**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口、ExecutorService和Future。并发框架如Concurrent包中的工具类(Semaphore、CyclicBarrier、CountDownLatch、Exchanger)用于...
1. 临界区:通过控制多线程对代码段的访问顺序。 2. 互斥对象:使用synchronized关键字实现,确保同一时刻只有一个线程访问对象。 3. 信号量:Semaphore类用于控制同时访问特定资源的线程数量。 4. 事件对象:使用...
Java并发工具类是Java平台提供的一系列用于处理多线程并发问题的类和接口,它们在`java.util.concurrent`包中。并发问题主要包括资源竞争、死锁、活锁以及饥饿等,合理使用并发工具可以有效地提高程序的并发性能并...
6. **多线程技术**:在处理多个叫号请求时,系统可能需要使用多线程来并发处理,确保叫号过程的及时性。Java的并发库提供了丰富的工具,如ExecutorService,可以有效地管理线程池,提高系统性能。 7. **消息队列**...
1. **Java源码**:Java是企业级应用的首选编程语言,其强大的多线程能力使得处理高并发场景变得可能。Java提供了`java.util.concurrent`包,包含了丰富的并发工具类,如`ExecutorService`、`Semaphore`、`...
在多线程环境下,为了保证共享资源的安全访问,可以使用synchronized关键字、显式锁、原子变量、并发集合类等技术。除了synchronized,还可以使用CAS操作和锁机制来实现线程安全。 ### Volatile关键字 volatile...
4. **Java高并发API**:标签中提到的"java高并发api"可能是指Java中处理多线程和并发操作的API,如`java.util.concurrent`包下的工具类,如ExecutorService、Semaphore、CountDownLatch等。这些工具帮助开发者有效地...
3. 多线程:线程的创建与管理,同步机制(synchronized、Lock),并发工具类(ExecutorService、CountDownLatch、CyclicBarrier等)的使用。 4. I/O流:文件操作、网络通信、对象序列化等涉及流的场景。 5. 异常处理...
Java中的volatile和ThreadLocal都是用于处理多线程环境下的数据同步问题。volatile确保了变量在所有线程间可见,但不保证原子性。ThreadLocal为每个线程提供独立的变量副本,避免了共享数据的冲突,但过度使用可能...
- **线程池**:理解ExecutorService和ThreadPoolExecutor,优化多线程程序的性能。 4. **I/O流** - **字节流与字符流**:理解二进制数据和文本数据的读写方式。 - **缓冲区流**:提高数据传输效率,减少磁盘操作...
4. **多线程**:线程的创建、同步控制(synchronized、wait/notify等)和线程池。 5. **反射机制**:在运行时动态获取类信息并操作对象。 接着,我们关注到标签中有"java高并发api",这可能包括: 1. **并发控制**...
6. **多线程** - **线程的创建**:通过实现Runnable接口或继承Thread类创建线程。 - **线程同步**:synchronized关键字、wait()、notify()和notifyAll()方法的应用。 - **线程池**:ExecutorService和...