我有一个eclipse插件,它是多线程应用程序。对于多线程,我使用了ExecutorFramework
我有一个主类,其中有3个主要功能[analysis1(),analysis2(),analysis3()],它们使用多线程。
Class Testing{
initialization();
analysis1();
.....
....
analysis2();
....
if(condition) {
analysis3()
}
假设initilaization()对应10%,分析1(),分析2()和分析3()分别对应40%,10%,40%
所有analysis1(),analysis2()和analysis3()看起来如下所示 我起诉监视器的地方
exeService = Executors.newFixedThreadPool(coresNumber);
ExecutorCompletionService<Void> exeCompletionService = new ExecutorCompletionService<Void>(
exeService);
List<Future<Void>> futures = new ArrayList<Future<Void>>();
int workPerUnit = percentfunc/ futures.size();
for (int i = 0; i < futures.size(); ++i) {
Future<Void> future = exeCompletionService.take();
monitor.worked(workPerUnit);
if (null != monitor && monitor.isCanceled()) {
if (exeService != null) {
exeService.shutdownNow();
}
return Status.CANCEL_STATUS;
}
future.get();
}
percentfunc是我为每个主要功能提供的百分比。
我有一个问题,即即使在执行第二个主要功能之前,监视器也会完成100%。应该怎么做来解决这个问题。
我没有考虑多线程来报告进度。任何关于如何使用它的想法表示赞赏。
我还必须考虑执行analyze3()有时是可选的。在那种情况下,initialization(),analysis1(),analysis2()一起应该100%。