Java:如何从主程序/类中单独运行线程?

hel*_*pls 16 java parallel-processing multithreading

SUBJ.如何从主类BUT中分别从该类运行线程?

所以有一些细节:我有一个程序必须运行一个进程.该进程(一个cmd)仅在主程序完成并从内存中卸载时运行.并且只有在卸载主程序后才开始工作.

我该怎么加入该计划?

Kde*_*per 33

如果你的意思是:我怎样才能启动一个在我的JVM(java程序)工作时不会结束的Java线程?.

The answer is: you can't do that.

因为在Java中,如果JVM退出,则完成所有线程.这是一个例子:

class MyRunnable implements Runnable { 
   public void run() { 
       while ( true ) { 
           doThisVeryImportantThing(); 
       } 
   } 
} 
Run Code Online (Sandbox Code Playgroud)

上面的程序可以从你的主线程启动,例如,这段代码:

MyRunnable myRunnable = new MyRunnable(); 
Thread myThread = new Thread(myRunnable);
myThread.start(); 
Run Code Online (Sandbox Code Playgroud)

此示例程序将永远不会停止,除非某些内容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(); 
Run Code Online (Sandbox Code Playgroud)

这将确保,如果main()线程结束,它也将终止myThread.

但是,您可以从java启动一个不同的JVM,因为您可能想要查看这个问题: 从Java应用程序启动JVM进程使用Runtime.exec?


Pet*_*ego 5

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

class MyRunner implements Runnable{
  public void run(){
     Runtime.exec("your cmd")
  }
}
Run Code Online (Sandbox Code Playgroud)

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

MyRunner myRunner = new MyRunner(); 
Thread myThread = new Thread(myRunner);
myThread.start();
Run Code Online (Sandbox Code Playgroud)

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