ProcessBuilder设计反馈的多线程实现

时间:2012-08-08 04:22:27

标签: java multithreading

我是一个相当新的Java开发人员,所以我正在寻找一些社区反馈,他们将如何实现我需要解决的问题的解决方案,以及对我提出的解决方案的反馈。

没有太多细节,这就是欲望:

  1. 我需要处理大量数据,然后以非常通用的方式对这些数据执行7个步骤。我已经有了一个应用程序/框架,它可以非常有效地执行此操作,并且可以重新启动,安全且最重要的是隔离的方式。我利用现有的框架非常重要。
  2. 我需要在很短的时间内使用许多不同的数据实例。如果我有时间这样做,我会通过上述框架以连续方式执行此操作,但我不会。我需要构建/拆分/校验和一些数据,同时压缩和传输其他数据,否则它将无法及时完成。
  3. 我的想法是在单独的应用程序中使用我现有的应用程序/框架(我们将其称为“子”),在单独的应用程序中使用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();
    }
    

    假设存在来自线程的所有“return;”,并且从工作队列(父级)或实际工作(子级)级别外部处理重启功能,这种方法是否有意义?它注定要失败吗?

    仍然无法找到一个不这样做的理由,任何人?

0 个答案:

没有答案