java - Java 中的 AsyncTask 等价物

标签 java multithreading timer

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

最佳答案

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

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;
    }
}

关于java - Java 中的 AsyncTask 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272642/

相关文章:

android - SQLiteOpenHelper 单连接与多连接

multithreading - 为什么 java.lang.Thread.join() 方法是这样命名的?

c++ - 如果互斥锁被锁定,安全地跳过任务

ruby - 在 Ruby 中,如何将 sleep 与 gets 结合起来?我想等待用户响应 1 分钟,否则继续

c# - 使用Windows Timer耗时事件的音频录制问题

javascript 代码不工作。可能将它错误地附加到 html 页面

java - SP 返回的结果集 - SQL Server - Java

java - 如果 Cipher 编码失败,重试也会失败

java - 使用 JDOM 解析文件中的 SOAP 响应

java - 我正在学习为包中的接口(interface)单独编写实现类,但不断出现错误?