如果这是一个基本问题,我提前道歉,但我是新材料 . 我有一个软件是由用户通过网站提交工作开始的 . 因为软件本身就是为了利用并行处理而设计的,所以我想要做的就是排队这些工作,这样他们就可以一个接一个地开始工作 . 为此,我试图利用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)不同,保证返回的执行程序不可重新配置以使用其他线程 .

这使我认为它需要多个任务,排队,并且一次只运行一个软件实例 . 正如你可能怀疑的那样,我正在写作,因为它没有这样做 . 它开始的任务和我提交的任务一样多(我知道,大多数人可能想要做的事情的相反问题) . 非常感谢您对此问题的任何帮助,并提前感谢您 .