如果这是一个基本问题我提前道歉,但我是新材料。我有一个软件是由用户通过网站提交工作开始的。因为软件本身就是为了利用并行处理而设计的,所以我想要做的就是排队这些工作,这样他们就可以一个接一个地开始工作。为此,我试图利用Java内置的Executor框架。我开发的代码是:
public JobManager()
{
mcpExecutor = Executors.newSingleThreadExecutor();
}
public Future<MatlabProcessResults> startProcess(inputs)
{
MyProcess myProcess = new MyProcess(inputs);
Future<MyProcessResults> future = mcpExecutor.submit(myProcess);
Long newKey = System.currentTimeMillis();
futures.putIfAbsent(newKey, future);
}
每次按下“提交”按钮时,都会运行startProcess。现在,newSingleThreadExecutor的描述为:
创建一个Executor,它使用一个在无界队列中运行的工作线程。 (但请注意,如果此单个线程由于在关闭之前执行期间的故障而终止,则在需要执行后续任务时将使用新的线程。)保证任务按顺序执行,并且不会有多个任务处于活动状态在任何给定的时间。与其他等效的newFixedThreadPool(1)不同,保证返回的执行程序不可重新配置以使用其他线程。
这让我认为它需要多个任务,排队,并且一次只运行一个软件实例。正如你可能怀疑的那样,我正在写作,因为它没有这样做。它开始的任务和我提交的任务一样多(我知道,大多数人可能想要做的事情的相反问题)。非常感谢您对此问题的任何帮助,并提前感谢您。