我有一个独特的要求,但我无法在网上找到相关参考资料。
我们通常每个周末都会从数据仓库应用程序中获取巨大的员工对象地图,对于该地图中的每个员工对象,我们需要处理活动事件列表。这里的问题是,每个 Employee 对象的事件需要按顺序处理,如果某个事件处理失败,那么我们退出处理该 Employee 的完整事件列表。
像这样,我们需要在各自的线程上并发处理map中的所有Emp对象。
例如,我将采用 3 个员工对象。
Emp1 -> E1Activity1,E1Activity2,E1Activity3
Emp2 -> E2Activity1,E2Activity2
Emp3 -> E3Activity1,E3Activity2,E3Activity3,E3Activity4
在这种情况下,应该创建 3 个线程,并且每个员工对象应该开始在自己的线程上处理每个活动,并且只有当一个活动完全处理完毕后,才应该开始处理下一个活动。
并且,Emp 对象的数量可以更改为任意数量,而不一定是上面解释的 3。
基于上述,我如何创建线程,以便我可以继续按顺序触发请求,同时还同时创建执行相同操作的其他线程。
如有任何帮助,我们将不胜感激。预先感谢您。
如果“处理活动事件列表”涉及阻塞,例如日志记录、读/写文件、访问数据库或进行网络调用,那么您的情况适合 Java 21+ 中的虚拟线程功能。
将每个传入的 Employee 对象作为任务 (
Runnable
/Callable
) 分配给由虚拟线程支持的执行器。
try(
ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor() ;
) {
for( Employee employee : employees)
{
EmployeeProcessingTask task = new EmployeeProcessingTask( employee ) ;
executorService.submit( task ) ;
}
}
在您的
EmployeeProcessingTask
类中,您按正确的顺序处理该员工的每个 Activity
对象。如果失败,则结束那些 Activity
对象的循环。