首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSR352 -Wildfly / jberet如何暂停和恢复线程

JSR352 -Wildfly / jberet如何暂停和恢复线程
EN

Stack Overflow用户
提问于 2018-01-09 21:53:53
回答 1查看 340关注 0票数 0

我正在尝试收集可能需要大约5天才能完成的大量数据,使用JBeret implementation.We运行提取,使用WildFly10.1.0应用服务器与子系统(Jberet)作为内存中的作业存储库。

我将从数据库中收集数据的分块过程和压缩过程的batchlet看作是单个作业id下的两个分步过程。

此外,我正在使用多线程运行提取,这意味着我们将使用10个线程并行收集数据。

由于数据库速度慢/内存问题导致出现作业失败异常。

代码语言:javascript
复制
2018-01-07 00:49:24,999 ERROR [org.jberet] (Batch Thread - 8) JBERET000007: Failed to run job simple-batchlet-job, step1, org.jberet.job.model.Chunk@3f63b3dd: javax.transaction.RollbackException: ARJUNA016102: The transaction is not active! Uid is 0:ffffac1d2026:37db6cf6:5a4f7329:49355
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1190)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126)

如果数据库中有任何异常问题,是否有可能暂停所有线程,并恢复它,以便我们可以从数据库中清除垃圾。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-12-02 04:10:43

您可以尝试使用threadpoolexecutor运行工作负载(当前是批处理)。

首先设置一个线程线程池执行器。然后,您需要一个线程来监视DB运行状况(CPU、内存,任何您认为有用的东西)。根据运行状况,它将增加或减少线程池中的线程数量。

然后,您将工作负载作为Runnables分配到threadpoolexecutor中,它将尝试使用所有可用线程来处理Runnables队列中的工作。

我知道这种方法不使用JSR-352,但至少您可以控制并行工作的数量。您甚至可能会想,如果在所有线程都在使用的情况下减少线程数,会发生什么情况。应该杀死它们中的一个,还是应该优雅地减少线程?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48169722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档