如何在不同的Thread上运行程序的某些部分并将引用变量引用到Thread?

时间:2013-07-04 06:41:58

标签: java multithreading process thread-sleep

因此,而不是“休眠”一个线程,就像在Thread.sleep();中一样,只是允许进程在另一个线程上运行并使新线程与Thread.sleep();一起休眠而不是原始Thread 。这可能吗?

以下是我希望在名为Thread的新processesThread上投放的方法:

    private void Processes() throws IOException, InterruptedException {

        // New Thread "processesThread" will start here.

        Runtime rt = Runtime.getRuntime();
        List<Process> processes = new ArrayList<Process>();

        // "runnableTogether" will be the number that the user inputs in the GUI.

        switch (runnableTogether) {

            case 4:
                processes.add(rt.exec("C:/Windows/System32/SoundRecorder.exe"));
            case 3:
                processes.add(rt.exec("C:/Windows/System32/taskmgr.exe"));
            case 2:
                processes.add(rt.exec("C:/Windows/System32/notepad.exe"));
            case 1:
                processes.add(rt.exec("C:/Windows/System32/calc.exe"));
                Thread.sleep(5000);
                destroyProcesses(processes);

                break;

            default:

                System.exit(0);

                break;

        }

        // New Thread "processesThread" will end here.

    }

这可能吗?如果是这样,怎么样?

我已经研究过开始新的Threads,但我无法弄清楚如何让它与我的程序一起使用。

编辑:我希望使用与此方法类似的东西:

Thread processesThread = new Thread() {
    public void run() {
        // Code here.
    }
};
processesThread.start();

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果我的问题正确,你想知道当前线程保持运行状态时如何休眠其他线程。您可以使用waitnotify

这是一个例子;

final Object mon = ...;
Thread t1 = new Thread(new Runnable() {
    @Override
    public void run() {
        synchronized (mon) {
            try {
                mon.wait(); //blocks the t1 thread
            } catch (InterruptedException e) {
                //
            }
        }
    }
});

mon.wait()阻塞t1线程,直到另一个线程调用mon.notify()来唤醒正在mon对象上等待的线程。如果监视器上有多个线程正在等待,您也可以调用mon.notifyAll() - 这将唤醒所有线程。但是,只有一个线程能够抓住监视器(记住等待在同步块中)并继续 - 其他线程将被阻塞,直到它们可以获取监视器的锁定。