如何在Java中运行与主线程分开的线程?

目标是能够从主类中调用单独线程的执行。

一些上下文:我有一个必须运行进程的程序。该进程(cmd)应仅在主程序执行完毕并从内存中卸载时运行。

主类中应包含哪些代码?


答案 1

如果你的意思是:我如何启动一个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进程?


答案 2

创建一个执行外部程序的单独线程:

class MyRunner implements Runnable{
  public void run(){
     Runtime.exec("your cmd")
  }
}

然后在 main() 中启动线程:

MyRunner myRunner = new MyRunner(); 
Thread myThread = new Thread(myRunner);
myThread.start();

这样,您的主程序将继续运行,而后台线程将启动外部进程并在该程序退出时退出。