代码实现如下:
package blockque;
/**
*
* 主线程等待其他线程处理完毕,
* 获取其他线程的结果通知,
* 类似于 Future 的用法
*
*/
public class TestWait {
public static void main(String[] args) {
RequestData requestData = new RequestData();
//开始请求其他接口
new FutureClient(requestData).start();
System.out.println("主线程不阻塞,继续干自己的活。。。");
//请求获取请求结果
String result = requestData.getData();
System.out.println("主线程已经处理完毕,其他线程处理的返回结果是:" + result);
}
}
class FutureClient extends Thread{
private RequestData requestData;
public FutureClient(RequestData requestData) {
this.requestData = requestData;
}
@Override
public void run() {
//模拟请求
requestData.requestAction();
}
}
class RequestData {
private volatile boolean isReturn = false;
private String result;
public synchronized void requestAction() {
try {
System.out.println("模拟请求处理3秒的时间");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.isReturn = true;
this.result = "ok";
this.notify();
}
public synchronized String getData () {
while (!this.isReturn) {
try {
wait();
} catch (InterruptedException e) {
}
}
return this.result;
}
}
本文通过一个具体的代码示例,展示了如何使用类似Future的设计模式,使主线程在等待其他线程处理完毕并获取其结果的同时,能够继续执行自身任务。通过自定义的RequestData和FutureClient类,模拟了一个请求处理过程,主线程在不被阻塞的情况下,最终成功获取到其他线程处理的返回结果。
734

被折叠的 条评论
为什么被折叠?



