สมบูรณ์()คืมพล่ามคำเชยๆออกมาไม่หยุดที่จะฟังก์ชันกำลังเปลี่ยนแปลงก่อนขั้นเป็นผลลัพธ์แล้วกลับมา getResponse("a1=bangladesh. kgm&a2=เมือง")
การตอบสนองคุณสามารถวิ่งนี้วิธีการในมุมมองที่ต่างออกด้า
ตอนที่ getResponse()วิธีการของการตอบสนอยู่แล้ว thenApply()จะ invoked เพื่อพิมพ์ปูมบันทึก.
ไม่มีใครจะถูกปิดกั้นหากคุณวิ่ง getResponse(ข้อความที่อยู่ url)ในมุมมองที่ต่างออกเส้นด้าย
นี่ตัวอย่างแสดงการสร้างสถานการณ์จำลองที่เราเป็นการพิมพ์เป็นปูมบันทึกในขณะที่ได้ฟื้นคืนชีพจากสมบูรณ์();
รหัส
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class CompletableFutureEx {
Logger logger = Logger.getLogger(CompletableFutureEx.class.getName());
public static void main(String[] args) {
new CompletableFutureEx().completableFutureEx();
}
private void completableFutureEx() {
var completableFuture = new CompletableFuture<String>();
completableFuture.thenApply(response -> {
logger.log(Level.INFO, "Response : " + response);
return response;
});
//some long process response
try {
completableFuture.complete(getResponse("a1=Chittagong&a2=city"));
} catch (Exception e) {
completableFuture.completeExceptionally(e);
}
try {
System.out.println(completableFuture.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
private String getResponse(String url) throws URISyntaxException, IOException, InterruptedException {
var finalUrl = "http://localhost:8081/api/v1/product/add?" + url;
//http://localhost:8081/api/v1/product/add?a1=Chittagong&a2=city
var request = HttpRequest.newBuilder()
.uri(new URI(finalUrl)).GET().build();
var response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("response body " + response.body());
return response.body();
}
}