如何实现真正的异步java线程

Rit*_*yak 18 java multithreading asynchronous runnable

我有一个需要执行两个操作的函数,一个快速完成,另一个需要很长时间才能运行.我希望能够将长时间运行的操作委托给一个线程,我不在乎线程何时完成,但线程需要完成.我实现了如下所示,但是,我的第二次操作永远不会完成,因为函数在start()调用之后退出.我如何确保函数返回但第二个操作线程也完成其执行并且不依赖于父线程?

public void someFunction(String data)
{
   smallOperation()
   SecondOperation a = new SecondOperation();
   Thread th = new Thread(a);
   th.Start();
}

class SecondOperation implements Runnable
{
  public void run(){
  // doSomething long running
 }
} 
Run Code Online (Sandbox Code Playgroud)

Bin*_*mas 42

public void someFunction(final String data) {
    shortOperation(data);
    new Thread(new Runnable() {
        public void run(){
            longOperation(data);
        }
    }).start();
}
Run Code Online (Sandbox Code Playgroud)

如果someFunction被调用,JVM将运行longOperationif

  1. 运行它的线程没有标记为守护进程(在上面的代码中它不是)
  2. longOperation()不抛出一个异常
  3. 没有调用System.exit() longOperation()