代码实现如下:
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;
}
}