java中的AsyncTask等价物

Jda*_*649 5 java multithreading timer

在android中有AsyncTask运行一个线程,然后我可以使用post执行的方法再次与主线程交互.在java中有相同的东西吗?我试图在单独的线程(doInBackground)上运行一个计时器,一旦时间结束,它将允许我与主要的theard交互以重新启动服务(onPostExecute将重新启动服务)

Tua*_* Do 5

我不是Android开发人员,但我认为可以通过在Java 8上使用CompletableFuture轻松实现它:

import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.CompletableFuture;
import javax.swing.SwingUtilities;

public abstract class AsyncTask <Params, Progress, Result> {
    protected AsyncTask() {
    }

    protected abstract void onPreExecute();

    protected abstract Result doInBackground(Params... params) ;

    protected abstract void onProgressUpdate(Progress... progress) ;

    protected abstract void onPostExecute(Result result) ;

    final void  publishProgress(Progress... values) {
        SwingUtilities.invokeLater(() -> this.onProgressUpdate(values) );
    }

    final AsyncTask<Params, Progress, Result> execute(Params... params) {
        // Invoke pre execute
        try {
            SwingUtilities.invokeAndWait( this::onPreExecute );
        } catch (InvocationTargetException|InterruptedException e){
            e.printStackTrace();
        }

        // Invoke doInBackground
        CompletableFuture<Result> cf =  CompletableFuture.supplyAsync( () -> doInBackground(params) );

        // Invoke post execute
        cf.thenAccept(this::onPostExecute);
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)