/**
*
* 批量复核线程
*
* @author ThinkPad
*
*/
class BatchCheckThread implements Runnable {
private String comment;
private List<TaskInstanceBean> tibs;
private User user;
private String strDN;
private CountDownLatch countDown = null;
//gets sets
@Override
public void run() {
try {
long begin = System.currentTimeMillis();
Logger.getLogger(BatchCheckThread.class).info("开始执行线程:" + Thread.currentThread().getName() + ",条数:" + tibs.size());
execute();
Logger.getLogger(BatchCheckThread.class).info("线程:" + Thread.currentThread().getName() + ",耗时:" + (System.currentTimeMillis() - begin) + " ms");
} catch(Exception e) {
new RuntimeException(e);
} finally {
if(null != countDown) countDown.countDown();
}
}
private void execute() {
if(null == tibs) return;
for(TaskInstanceBean tib : tibs) {
List<Transition> trans = tib.getAvailableTransitions();
for(Transition tran : trans){
String tansName = tran.getName();
if(isCanApproval(comment, tib, tran)){
ServiceFactory.getInstance().getJbpmProcessService().handelTask(tib.getTaskInstanceId(), tansName, user, "批量"+tansName, strDN ,null);
break;
}
}
}
}
private boolean isCanApproval(String comment, TaskInstanceBean tib, Transition tran) {
if(tib.getTaskInstance().getName().equals("复核") && "同意".equals(comment)) {
return "送审批".equals(tran.getName());
}
return tran.getName().equals(comment + tib.getTaskInstance().getName());
}
}
--调用线程
for(List<TaskInstanceBean> o : oList) {
BatchCheckThread t = new BatchCheckThread();
t.setComment(comment);
t.setStrDN(strDN);
t.setTibs(o);
t.setUser(this.getCurrentUser(request));
t.setCountDown(end);
new Thread(t).start();
}
// 等待所有线程结束
end.await();
分享到:
相关推荐
本文将详细介绍如何利用MyBatis结合多线程和CountDownLatch闭锁来实现数据的批量插入。 首先,我们来看`mybatis批处理`。MyBatis的批处理功能允许我们在一次数据库连接中执行多条SQL语句,从而减少了数据库连接的...
在Delphi这样的集成开发环境中,利用多线程进行批量下载是常见的应用场景,尤其对于处理大量数据或者大文件下载时,可以避免单一线程导致的阻塞和长时间等待。 标题“Delphi多线程批量下载”指的是使用Delphi编程...
phpMyAdmin多线程批量破解工具 phpMyAdmin多线程批量破解工具phpMyAdmin多线程批量破解工具
本主题将探讨如何利用线程技术实现图片在屏幕上的水平循环往返移动。线程在Android中扮演着处理后台任务的重要角色,它可以避免因为长时间运行操作而阻塞主线程,确保UI的流畅性。 首先,我们需要理解Android的线程...
本项目是基于Delphi开发的一个多线程批量文件下载及解压程序,通过利用Delphi的强大功能和三方库,实现了高效、稳定的文件下载与解压操作。下面将详细阐述这个程序的核心知识点。 首先,Delphi是一个流行的面向对象...
易语言批量启动多线程源码是一个用于编程的实践示例,主要针对的是易语言这一中国本土化的编程语言。易语言是由王江民先生创建的一种简单易学、面向普通用户的编程语言,其设计理念是使编程变得简单,让更多人能够...
本项目中的"python多线程批量访问url脚本"正是基于这个理念设计的。 该脚本采用了第三方库`grequests`,它是`requests`库的一个并行版本,能够支持异步的HTTP请求。`requests`库是Python中广泛使用的HTTP客户端,而...
一个线程从A表读数据放入队列 N个线程从队列中取出数据,找到其在子表中的数据 对子表中的数据开3种线程:读,发email,标记状态 N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送...
Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...
提供了批量ping IP检测连通性的功能,可支持单IP,多IP,从文件中导入IP列表功能。当IP数量较多时,启用多线程ping,提高ping测效率
在Java编程中,多线程技术是处理大数据批量导入或导出的重要手段。它能有效提升程序执行效率,尤其在数据库操作这样的I/O密集型任务中。本项目以"java多线程实现大批量数据导入源码"为题,旨在通过多线程策略将大量...
在Windows编程领域,MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows应用程序的开发,包括创建用户界面和实现多线程功能。MFC中的多线程技术使得程序能够同时执行多个任务,提高应用的...
### MFC多线程的创建详解 #### 一、MFC多线程概述 MFC (Microsoft Foundation Classes) 是微软为简化Windows程序开发提供的一套类库,它封装了Win32 API,使得开发者能够更加方便地进行Windows应用程序的开发。在...
### Java多线程加队列上传文件_后台处理 #### 概述 本文将详细介绍一个基于Java实现的多线程文件上传系统,并结合队列管理技术来优化后台处理流程。该系统通过创建多个线程来并行处理客户端的文件上传请求,同时...
本文将深入探讨如何挂起线程、休眠线程以及终止线程,这些都是多线程编程中的关键概念。 首先,让我们了解线程的基本概念。线程是程序执行的流程,每个进程至少有一个线程。在多线程环境中,多个线程可以共享同一...
在描述中提到的问题是典型的多线程性能问题:当开启40个线程与单线程运行相比,整体执行时间反而变慢了。这可能源于以下几个原因: 1. **线程切换开销**:操作系统在管理多线程时需要频繁地进行上下文切换,即保存...
《多线程文本批量添加器V3.2》是一款高效实用的工具软件,专为需要大量处理文本内容的用户设计。这款应用的核心功能是利用多线程技术来加速文本的批量添加过程,从而大大节省了用户的时间,尤其适用于居家办公或需要...