因此,而不是“休眠”一个线程,就像在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();
有什么想法吗?
答案 0 :(得分:1)
如果我的问题正确,你想知道当前线程保持运行状态时如何休眠其他线程。您可以使用wait
和notify
。
这是一个例子;
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()
- 这将唤醒所有线程。但是,只有一个线程能够抓住监视器(记住等待在同步块中)并继续 - 其他线程将被阻塞,直到它们可以获取监视器的锁定。