如何在Java中运行与主线程分开的线程?
2022-09-03 04:16:26
目标是能够从主类中调用单独线程的执行。
一些上下文:我有一个必须运行进程的程序。该进程(cmd)应仅在主程序执行完毕并从内存中卸载时运行。
主类中应包含哪些代码?
目标是能够从主类中调用单独线程的执行。
一些上下文:我有一个必须运行进程的程序。该进程(cmd)应仅在主程序执行完毕并从内存中卸载时运行。
主类中应包含哪些代码?
如果你的意思是:我如何启动一个Java线程,当我的JVM(java程序)不会结束时??
The answer is: you can't do that.
因为在Java中,如果JVM退出,所有线程都完成了。下面是一个示例:
class MyRunnable implements Runnable {
public void run() {
while ( true ) {
doThisVeryImportantThing();
}
}
}
上述程序可以从主线程启动,例如,通过以下代码:
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
myThread.start();
此示例程序永远不会停止,除非 中的某些内容会终止该线程。您可以将其作为守护程序运行,如以下示例所示:doThisVeryImportantThing
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
myThread.setDaemon(true); // important, otherwise JVM does not exit at end of main()
myThread.start();
这将确保,如果主()线程结束,它也将终止myThread。
但是,您可以从Java启动一个不同的JVM,为此,您可能希望查看以下问题:使用Run runtime.exec从Java应用程序启动JVM进程?
创建一个执行外部程序的单独线程:
class MyRunner implements Runnable{
public void run(){
Runtime.exec("your cmd")
}
}
然后在 main() 中启动线程:
MyRunner myRunner = new MyRunner();
Thread myThread = new Thread(myRunner);
myThread.start();
这样,您的主程序将继续运行,而后台线程将启动外部进程并在该程序退出时退出。