The goal is to be able to invoke execution of a separate thread from within the main class.
Some context: I have a program that must run a process. The process (a cmd one) should run only when the main program is done executing and is unloaded from memory.
What code should I include in the main class?
By using join you can ensure running of a thread one after another.
You can not stop the main thread while any other thread are running. (All the child threads born out of main thread.) You can use function Thread. join() to keep the main thread waiting while other thread(s) execute.
The run() method of thread class is called if the thread was constructed using a separate Runnable object otherwise this method does nothing and returns. When the run() method calls, the code specified in the run() method is executed.
If you mean: how can I start a Java thread that will not end when my JVM (java program) does?.
The answer is: you can't do that.
Because in Java, if the JVM exits, all threads are done. This is an example:
class MyRunnable implements Runnable {
public void run() {
while ( true ) {
doThisVeryImportantThing();
}
}
}
The above program can be started from your main thread by, for example, this code:
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
myThread.start();
This example program will never stop, unless something in doThisVeryImportantThing
will terminate that thread. You could run it as a daemon, as in this example:
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
myThread.setDaemon(true); // important, otherwise JVM does not exit at end of main()
myThread.start();
This will make sure, if the main() thread ends, it will also terminate myThread.
You can however start a different JVM from java, for that you might want to check out this question: Launch JVM process from a Java application use Runtime.exec?
Create a separate thread that executes your external program:
class MyRunner implements Runnable{
public void run(){
Runtime.exec("your cmd")
}
}
then start the thread in your main():
MyRunner myRunner = new MyRunner();
Thread myThread = new Thread(myRunner);
myThread.start();
This way your main program will continue running, while your background thread will start an external process and exit when this program exits.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With