本文目录一览:
- 1、Java回调以及如何获取线程的执行结果
- 2、java 子线程 回调 主线程
- 3、java 子线程如何返回结果给主线程
- 4、在java层用线程调用native方法 jni能回调主线程的方法吗
- 5、java中开启子线程后主线程中传入的变量不变
Java回调以及如何获取线程的执行结果
软件模块之间存在调用的接口,从调用方式来看,有同步调用、回调、异步调用这三种方式:
同步调用是是一种阻塞式调用,调用方要等待被调用方执行完毕返回后才能获取调用的执行结果,是一种单向调用。
回调是一种双向调用,调用方在执行被调用方后,被调用方会调用被调用方的接口;
异步调用是一种类似消息或者事件的机制,接口在收到某个消息或发生某事件时,会主动通知客户方,通常使用回调来实现异步调用。
Java回调的必须要素:
1.雇主类必须有可以被观察者调用的方法A;
2.观察者必须持有可以调用A的对象的引用。
在实际工作中,我们通常将方法A以interface或者内部类的形式来实现,然后把包含有A的类的对象引用传递到观察者中。
Java中的线程的返回值是void,并且是一个异步执行流,所以我们没有直接的方法来获取线程执行后的结果,即不能直接知道线程何时结束,以及合适去获取线程执行任务后的结果。由于回调的存在,我们可以在线程中以回调的方式通知线程的调用者线程的结束时间,并可以将任务的结果通过回调回送到调用者中。
java 子线程 回调 主线程
如果主线程要等子线程完成才能继续执行又何必新开线程如果你非要这么干,java.util.concurrent.Future接口满足你的需求,具体用法百度
Future 接口
Future 接口允许表示已经完成的任务、正在执行过程中的任务或者尚未开始执行的任务。通过 Future 接口,可以尝试取消尚未完成的任务,查询任务已经完成还是取消了,以及提取(或等待)任务的结果值。
FutureTask 类实现了 Future,并包含一些构造函数,允许将 Runnable 或 Callable(会产生结果的 Runnable)和 Future 接口封装。因为 FutureTask 也实现 Runnable,所以可以只将 FutureTask 提供给 Executor。一些提交方法(如 ExecutorService.submit())除了提交任务之外,还将返回 Future 接口。
Future.get() 方法检索任务计算的结果(或如果任务完成,但有异常,则抛出 ExecutionException)。如果任务尚未完成,那么 Future.get() 将被阻塞,直到任务完成;如果任务已经完成,那么它将立即返回结果。
java 子线程如何返回结果给主线程
可以的 你的主线程和子线程 synchronized 一个boolean变量(flag)
当子线程到达一定条件是将其设置成false;
而主线程run()做这样的设置 while(flag){}
这样主线程就会结束了~~
其实有直接关闭线程的方法 但是不建议这么做~~
防止出现死锁.
在java层用线程调用native方法 jni能回调主线程的方法吗
你是说在子线程中调用native方法,然后在native中调用java方法,想让java方法在java的主线程中执行是吗?不能直接这样做的,可以改下思路,在native回调java方法后,在java方法发送消息给主线程,主线程收到消息后去回调你真正想要执行的方法。比如在Android上可以使用Handler通信
java中开启子线程后主线程中传入的变量不变
使用回调,变量改变。
在主线程中对类C的实变量进行设置,然后输出变量开启子线程,通过构造函数传入变量,在子线程中改变变量的值子线程中调用主线程的静态方法传递数据给主线程说明子线程执行结束子线程结束后在主线程中查看变量已经发生改变。
每个线程都有一个唯一标示符,来区分线程中的主次关系的说法, 线程唯一标示符,Thread.CurrentThread.ManagedThreadID。