1,com.xxx.mop.portal.web.listener.ThreadPoolListener是个监听器,他在容器启动时候的就实例化了一个ThreadPool,这个容器每隔60秒就启动一个业务定时同步线程。
2,com.xxx.mop.bfp.biz.sync.impl.BizSyncTaskPoller用来定时获取业务订购日志中,状态为-1(-1:未执行;0:正在执行:1:已经处理完毕)的订购进行重新处理。每次取出的条数是根据库中配置的“perFetchUnhandleLimit”参数来获取的。取出来未处理的日志后,转化成对应的订单(CorpOrder/UserOrder),将每个订单转化成一个业务同步任务(com.xxx.mop.bfp.biz.sync.impl.BizSyncTask),然后放入线程池中进行处理。
3,com.xxx.mop.bfp.biz.sync.impl.BizSyncTask的作用就是向业务系统同步任务,然后更新bialog的状态。
4,com.xxx.mop.commons.concurrent.ThreadPool自定义的线程池管理器,采用了ThreadPoolExecutor实现。
5,com.xxx.mop.commons.concurrent.TrackingExecutor自定义的线程池包装类。这个线程池可以获取在线程池关闭时未完成的任务清单。实际将未完成的任务添加到列表中返回是在com.xxx.mop.commons.concurrent.RunnableWrapper中完成的,当任务在执行时,如果发现线程池完毕或者当前的线程被终止,那么正在执行的任务就会加入未完成的任务队列(List<Runnable)中,然后在线程池最终关闭时将这些任务再写回数据库中。AbstractExecutorService在关闭时能够获取到从未执行的任务清单,但是不能获取到已经提交但是还没执行完毕(还没取消执行)的任务清单,因此这里设计了这个类,用户在线程池关闭时同时获取已经提交但是还未执行完毕的任务,然后取消这些任务(将任务的状态更新为-1,com.xxx.mop.bfp.biz.sync.impl.BizSyncTask中重写了reject()和cancel()方法),以备下次线程再次启动时重新执行这些任务。
6,注意java.util.Collections的用法。如Collections.emptyList()。
7,ThreadPool中关闭所有同步线程是通过添加一个“钩子”实现的。
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
logger.info("==shutdown all bizsync worker thread==");
shutdownAllThreadPool();
}
}));
上面的方法添加了一个钩子,当虚拟机关闭时就会启动这个线程,shutdownAllThreadPool()方法再将所有还没有完成的任务重新更新成初始状态。
分享到:
相关推荐
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
在Java应用服务器中,Tomcat是一个非常常见的轻量级选择,尤其在开发和部署Web应用程序时。然而,如同任何其他程序一样,Tomcat也可能遇到内存管理问题,导致内存溢出。"java.util.concurrent.ExecutionException: ...
【标题】"ws-commons-util-1.0.2.zip_ws-comm-util.jar" 提供的是一个名为 ws-commons-util 的库的版本1.0.2,这个库经过压缩打包成ZIP格式,其中包含了 ws-comm-util.jar 文件。这个JAR文件是Java应用程序中常见的...
### Java并发工具包 `java.util.concurrent` 知识点详解 #### 一、引言 随着多核处理器的普及和应用程序复杂度的增加,多线程编程成为了现代软件开发不可或缺的一部分。为了简化并发编程的复杂性,Java 5 引入了 `...
Java.util.concurrent是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...
java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java.util.concurrent总体概览图。 收取资源分3分。需要的同学可以下载一下。 java.util.concurrent主要包括5个部分executor,colletions,locks,atomic,tools。 该图详细的列举了并发包下面的结构,包含所有接口和...
为了更好地支持并发编程,Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一个包含了许多中级并发支持类的集合,通过Java社区过程(Java Community Process, JCP)的Java规范请求(Java ...
一个高性能的Java线程库,该库是 JDK 1.5 中的 java.util.concurrent 包的补充,可用于基于并发消息机制的应用。该类库不提供远程的消息功能,其设计的宗旨是实现一个内存中的消息传递机制. 主要特点有: * All ...
### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....
在Java中,`java.util.logging.Logger` 是标准的日志框架之一,它提供了基础的日志记录功能。为了使用这一功能,首先需要获得 `java.util.logging.Logger` 的实例。可以通过调用 `Logger` 类中的静态方法 `getLogger...
backport-util-concurrent.jarbackport-util-concurrent.jarbackport-util-concurrent.jar
"JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用" JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用是Java多线程编程中的一种重要概念。随着多线程编程的普及,线程池的使用变得...
如何启动:以win7系统为例,最好jdk8 1.打开cmd,cd到jdk的path,本机是:cd C:\Java\jdk6\bin ...java -cp D:\javaConcurrentAnimated.jar vgrazi.concurrent.samples.launcher.ConcurrentExampleLauncher
### Java.util.Date与Java.sql.Date互转及字符串转换为日期时间格式 #### 一、Java.util.Date与Java.sql.Date的基本概念 在Java编程语言中,处理日期和时间时经常使用到`java.util.Date`和`java.sql.Date`这两个类...
本文将详细探讨Atlassian发布的`atlassian-util-concurrent-0.0.12.jar`库,这是一个专门针对并发处理的工具集,旨在简化Java开发中的多线程操作。 `atlassian-util-concurrent-0.0.12.jar.zip`是这个库的压缩文件...
ws-commons-util-1.0.2.jar 相关jar包
### Java.util.Date与Java.sql.Date相互转换 #### 知识点概述 在Java开发中,经常需要处理日期和时间相关的操作。Java标准库提供了两个重要的日期类:`java.util.Date` 和 `java.sql.Date`。虽然它们名字相似,但...