我有一个函数需要执行两个操作,一个完成得很快,另一个需要很长时间才能运行。我希望能够将长时间运行的操作委托(delegate)给一个线程,我不关心线程何时完成,但线程需要完成。我如下所示实现了它,但是,我的第二个操作从未完成,因为函数在 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
}
}
最佳答案
public void someFunction(final String data) {
shortOperation(data);
new Thread(new Runnable() {
public void run(){
longOperation(data);
}
}).start();
}
如果 someFunction
被调用,JVM 将运行 longOperation
如果
- 运行它的线程没有被标记 作为一个守护进程(在上面的代码中它 不是)
longOperation()
不会抛出异常- 在
longOperation()
中没有调用 System.exit()
关于java - 如何实现一个真正的异步 java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2676687/