Java回调以及如何获取线程的执行结果

如上面所说

软件模块之间存在调用的接口,从调用方式来看,有同步调用、回调、异步调用这三种方式:

    同步调用是是一种阻塞式调用,调用方要等待被调用方执行完毕返回后才能获取调用的执行结果,是一种单向调用。

    回调是一种双向调用,调用方在执行被调用方后,被调用方会调用被调用方的接口;

    异步调用是一种类似消息或者事件的机制,接口在收到某个消息或发生某事件时,会主动通知客户方,通常使用回调来实现异步调用。

Java回调的必须要素: 
1.雇主类必须有可以被观察者调用的方法A; 
2.观察者必须持有可以调用A的对象的引用。

在实际工作中,我们通常将方法A以interface或者内部类的形式来实现,然后把包含有A的类的对象引用传递到观察者中。

Java中的线程的返回值是void,并且是一个异步执行流,所以我们没有直接的方法来获取线程执行后的结果,即不能直接知道线程何时结束,以及合适去获取线程执行任务后的结果。由于回调的存在,我们可以在线程中以回调的方式通知线程的调用者线程的结束时间,并可以将任务的结果通过回调回送到调用者中。

温馨提示:答案为网友推荐,仅供参考
Java回调以及如何获取线程的执行结果
在实际工作中,我们通常将方法A以interface或者内部类的形式来实现,然后把包含有A的类的对象引用传递到观察者中。Java中的线程的返回值是void,并且是一个异步执行流,所以我们没有直接的方法来获取线程执行后的结果,即不能直接知道线程何时结束,以及合适去获取线程执行任务后的结果。由于回调的存在,我们可以在线程中以回调的方式通知线程的调用者线程的结束时间,并可以...

如何在java中获取线程异步执行之后的结果
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class TestFuture { public static void main(String[] args) throws InterruptedException, ExecutionException { ExecutorService executor = Executors.newCachedThreadPool();Future r...

Java线程池详解:Future的使用和实现
生成FutureTask时,需要指定异步任务,如指定的任务类型为Runnable类型的,则会被转换为Callable类型并将任务保存在callable字段中。通常,FutureTask的任务会在一个异步线程中执行,即在异步线程中执行其run方法。而FutureTask的run方法会调用其持有的异步任务的call方法,获取call的执行结果来更新FutureTask的结果...

java 8 CompletableFuture 详解
三、获取结果 使用join或get方法获取结果。 join:抛出未检查异常,无需强制处理。 get:抛出检查异常,需自行处理。四、结果处理 依赖关系:通过and方法实现。 聚合关系:支持andThen、orThen等方法。 并行执行:利用anyOf和allOf方法。 任务完成或异常时操作: whenComplete:执行特定操作。 ...

异步编程利器:CompletableFuture
在多线程异步执行任务的场景中,Java的Future接口提供了异步计算结果的能力,但其结果获取方式并不优雅,通常需要使用阻塞调用或轮询判断任务状态。这限制了任务的高效执行和依赖关系的管理。CompletableFuture的出现,为解决这些问题提供了更强大的工具。通过引入CompletableFuture,我们可以更方便地实现异步任务的...

Java常见的调用机制:同步调用,异步调用,回调
同步调用:程序依次执行,等待A方法返回结果。异步调用则更为灵活,B对象无需等待A方法完成,它可以在调用后立即继续执行其他任务。异步通常通过多线程实现,如以下代码所示:异步调用:线程A和主线程并发,B方法继续执行。示例代码:线程A启动,主线程继续执行其他语句。回调则是通过A对象的methodA()调用B...

java 8 CompletableFuture 详解
Java 8引入CompletableFuture以改进Future的异步执行机制,通过回调机制在任务完成或异常时自动调用指定方法。其应用场景包括创建异步任务、任务的异步回调以及多个任务的组合处理。创建异步任务时,可以选择默认的ForkJoinPool.commonPool()线程池或自定义线程池执行任务,以避免线程饥饿和系统性能下降。默认线程池...

如何查看Java应用的线程信息
使用Java自带的JConsole工具,启动应用后打开JConsole,选择对应进程,点击线程选项卡即可查看线程ID、名称和状态等信息。另外一种方法是使用jstack命令,此命令可打印Java应用的线程信息。首先获取应用进程ID,然后在命令行执行对应进程ID的jstack命令。执行后,将输出线程ID、名称和状态等信息,有助于诊断应用...

Java线程池在运行后的结果反查
)方法 都会返回一个Future(也是一个接口)类型的对象 该对象中包含了任务的执行情况以及结果 调用Future的boolean isDone()方法可以获知任务是否执行完毕 调用Object get()方法可以获得任务执行后的返回结果 如果此时任务还没有执行完 get()方法会保持等待 直到相应的任务执行完毕后 才会将结果返回 ...

java 如何获得线程池中正在执行的线程数?
getPoolSize:线程池的线程数量。如果线程池不销毁的话,池里的线程不会自动销毁,所以这个大小只增不+ getActiveCount:获取活动的线程数。通过扩展线程池进行监控。通过继承线程池并重写线程池的beforeExecute,afterExecute和terminated方法,我们可以在任务执行前,执行后和线程池关闭前干一些事情。如监控任务...

相似回答