我是一个相当新的 Java 开发人员,所以我正在寻找一些社区反馈,了解他们将如何为我需要解决的问题实施解决方案,以及对我提出的解决方案的反馈。
没有过多的细节,这是愿望:
- 我需要处理大量数据,然后以非常通用的方式对这些数据执行 7 个步骤。我已经有一个应用程序/框架可以非常有效地执行此操作,并且以可重新启动且安全且最重要的是隔离的方式。我利用这个现有的框架很重要。
- 我需要在相当短的时间内对许多不同的数据实例进行此操作。如果我有时间,我会通过上述框架以串行方式执行此操作,但我不会。我需要构建/拆分/校验和一些数据,同时压缩和传输其他数据,否则它永远不会及时完成。
我的想法是在一个单独的应用程序中利用我现有的应用程序/框架(我们称之为“子”),在一个单独的应用程序(“父”)中使用 ProcessBuilder() 调用队列。该解决方案允许我为父应用程序和子应用程序利用现有的可重新启动框架。
这是一种会被看不起的方法吗?这是一种可靠的方法吗?即使您不喜欢这种方法,如果您确定使用 ProcessBuilder 循环执行任务是最佳选择,您将如何解决它?
伪代码将类似于以下内容(幸运的是实际代码不会太长)
Class Task {
//contains all the information for the task we need to complete
String taskArgs;
}
Class TaskWatcher implements Runnable {
//constructor requires process object for Constructor
//boolean isFinished();
process.waitfor();
isFinished=true;
}
Class TaskOutStream implements Runnable {
//constructor requires process object & TaskWatcher object
//Receives and redirects output of process
}
Class Semaphore {
//constructor sets int threadCount (We'll call it "3" for now)
synchronized acquireThread{
while threadCount==0, wait();
threadcount--
}
synchronized releaseThread{
threadcount++
notify();
}
}
Class TaskThread implements Runnable (
// constructor requires Task Object
run() {
semaphoreObject.acquireThread();
Process p = ProcessBuilder.command("cmd text", "args").start();
tw = TaskWatcher(p);
ThreadOutStream(p, tw);
}
}
Class TaskRunner {
//Constructor requires ArrayList<Task>
//For each Task t
TaskThread thread = new TaskThread(t);
thread.start();
}
假设所有来自线程的“返回”都存在,并且重新启动功能是从工作队列(父)或实际工作(子)级别外部处理的,这种方法有意义吗?它注定失败吗?
仍然没有找到一个很好的理由不这样做,有人吗?