大成多线程与Spring事务

泉州娱乐新闻网 2025-09-19

e

public List processObjects(List objectIds) {

// Process and save to DB

logger.info("Running in thread " + Thread.currentThread().getName() + " with object ids " + objectIds.toString());

return objectIds.stream().collect(Collectors.toList());

}

}

第三步:也是最整体的一步,通过分块然后顺利完成并行处置。当然为了保持编译器的整齐开放性和隔离开放性,我们将在紧接著完全一致充分利用之前常用Decorator结构上模式。

克隆

/**

* Service implementation for parallel chunk processing

*/

@Service

@Primary

@ConditionalOnProperty(prefix = "service", name = "parallel", havingValue = "true")

public class ProcessingServiceParallelRunDecorator implements ProcessingService {

private ProcessingService delegate;

public ProcessingServiceParallelRunDecorator(ProcessingService delegate) {

this.delegate = delegate;

}

/**

* In a real scenario it should be an external configuration

*/

private int batchSize = 10;

@Override

public List processObjects(List objectIds) {

List chuncks = getBatches(objectIds, batchSize);

List processedObjectIds = chuncks.parallelStream().map(delegate::processObjects)

.collect(Collectors.toList());

return flatList(processedObjectIds);

}

private List> getBatches(List collection, int batchSize) {

return IntStream.iterate(0, i -> i i + batchSize)

.mapToObj(i -> collection.subList(i, Math.min(i + batchSize, collection.size())))

.collect(Collectors.toList());

}

private List flatList(List> listOfLists) {

return listOfLists.stream().collect(ArrayList::new, List::addAll, List::addAll);

}

最后,我们通过一个简单的程式设计可验证一下执行者的结果。

克隆

private List> getBatches(List collection, int batchSize) {

return IntStream.iterate(0, i -> i i + batchSize)

.mapToObj(i -> collection.subList(i, Math.min(i + batchSize, collection.size())))

.collect(Collectors.toList());

}

private List flatList(List> listOfLists) {

return listOfLists.stream().collect(ArrayList::new, List::addAll, List::addAll);

通过输出日志,我们见到如下的执行者结果:

克隆

ProcessingDBService: Running in thread ForkJoinPool.commonPool-worker-3 with object ids [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ProcessingDBService: Running in thread main with object ids [11, 12]

执行者结果也是符合期望目标的。List某类组后,除了主线许又通过ForkJoin启动时另外线许顺利完成并行处置。ProcessingServiceParallelRunDecorator 的parallelStream().map的并行处置大大提高了处置耐用开放性,而ProcessingDBService之前processObjects这个public法则上@Transactional的注解保证了的业务连续开放性,缺陷得以近乎化解。

译者介绍

胥磊,51CTO社区校对,某头部电商关键技术副总监,关注Java后端开发计划,关键技术管理制度,整体优化,分布式开发计划等领域。

原文标题:Multi-Threading and Spring Transactions,作者:Daniela Kolarova

苏州看白癜风哪个专科医院好
西宁白癜风专科医院哪好
南京看白癜风哪里最好
武汉环亚白癜风权威医院
苏州看癫痫哪家医院最好
相关阅读

82岁相声名家郑白石去世,苗阜卢鑫发文悼念!曾给郭德纲帮大忙

时尚 2025-10-23

1937年郑晓山,由于今天的疟疾临丧命。它的裁缝在湮灭当中写道:“泽胜余杭女士于2019年6月24日上午10:14逝世,享受82岁。”郑晓山女士是第六代第六代,生命是一个70岁的市场,为许多传统

课后延时服务,何时逆了味

资讯 2025-10-23

初中下午三四点小学生,这疑问近几年一直是各家长则会关切的疑问。好不容易迎来了小学生后反应时间维修服务,却慢慢变了味,成了各教务主任小学生后拼命接到劝真是,甚至给家长则会置之不理的最

投资人提问:尊敬的董秘您好!2021年12月31日,国家中医药管理局党组召...

影视 2025-10-23

投资者提问:尊敬的董秘您好!2021年12月31日,国家当中医药管理局党组召开会议时强调,要提很高意识形态东口,唯独“国之大者”,不断提很高意识形态判断力、意识形态领悟力、意识形态执行力,坚定

房屋租赁的AB面上

音乐 2025-10-23

除此以外有一位老友想到笔者,他在退租时被岳母百般刁难,借此就是不想退回遣金。事情起因于与老友整租了一套两室一厅的邻居,岳母在入住初期就获知新鸿基关于客厅有金属和但是不受到影响入住的疑虑,

虽是血肉之躯 却肩比神明 如今的盛世繁华都是多少先辈们用命换来的 铭记历史 勿忘国耻!致敬电影生死猛攻 电影生死猛攻定档国庆 李云龙

图片 2025-10-23

虽是血肉之躯 却肩比神 现在的两朝热闹都是多少便是们用命换取的 铭记近代 勿忘国耻!致敬科幻电影无常阻击 科幻电影无常阻击定档国庆 李云龙 a href="http

友情链接