摘要:模式類似于用戶提交商品訂單,下單成功以后后臺異步的執行耗時的業務在包中接口是線程模式的實現,可以來進行異步計算。
Future模式
類似于用戶提交商品訂單,下單成功以后后臺異步的執行耗時的業務
在java.util.concurrent包中.Future接口是Java線程Future模式的實現,可以來進行異步計算。
1.定義一個接口來處理請求
public interface Data{ String getRequest(); }
2.定義一個轉發請求的客戶端
public class FutureClient{ public Data request(final String queryStr){ //1.添加一個代理對象(Data接口的實現類) 先返回給發送請求的客戶端 //告訴客戶端收到請求,可以處理其他事情 final FutureData futureData = new FutureData(); //2.啟動一個新的線程 去加載真實的數據 傳遞給這個代理對象 new Thread(new Runnable(){ public void run(){ //3這個新的線程可以去慢慢的加載真實對象 //然后傳遞給代理對象 RealData realData = new RealData(queryStr); futureData.setRealData(realData); } }).start(); return futureData; } }
3.定義一個代理類來返回數據
public class FutureData implements Data{ private RealData realData; private boolean isReady = false; public void synchronized void setRealData(RealData realData){ //如果已經轉載完畢 直接返回 if(iReady){ return; } //如果沒有裝載,進行裝載真實對象 this.realData = realData; isReady = true; //進行通知 notify(); } public synchronized String getRequest(){ //如果沒有裝載好 程序就一直處于阻塞的狀態 while(!isReady){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //裝載好直接獲取數據即可 return this.realData.getRequest(); } }
4.定義一個處理大量耗時操作的類
public class RealData implements Data{ private String result; public RealData(String queryStr){ System.out.println("根據" + queryStr + "進行查詢, 這是一個很耗時的操作.."); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("操作完畢,獲取結果"); result = "查詢結果"; } public String getRequest(){ retun result; } }
5.定義一個測試類
public class Main{ public static void main(String[] args) throws InterruptedException { FutureClient fc = new FutureClient(); Data data = fc.request("發送請求"); System.out.println("請求發送成功!"); System.out.println("做其他的事情..."); String result = data.getRequest(); System.out.println(result); } }
結果如下
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70425.html
摘要:模式是常用的并行計算模式,它的核心思想是系統是由兩類進程協助工作。負責接收和分配任務,負責處理子任務。當各個子進程處理完成后,會返回結果給,由做歸納和總結。其好處是能將一個大任務分解成若干個小任務,并行執行,從而提高系統的吞吐量。 Master-worker模式是常用的并行計算模式,它的核心思想是系統是由兩類進程協助工作。Master負責接收和分配任務,worker負責處理子任務。當各...
摘要:生產者消費者模式是一個經典的多線程設計模式,它為多線程的協作提供了良好的解決方案。生產者消費者模式中的內存緩沖區的主要功能是數據在多線程間的共享。 生產者-消費者模式是一個經典的多線程設計模式,它為多線程的協作提供了良好的解決方案。在生產者-消費者模式中,通常有兩類線程,即若干個生產者線程和若干個消費者線程。生產者線程負責提交用戶請求,消費者線程負責處理用戶請求。生產者和消費者之間通過...
摘要:并發表示在一段時間內有多個動作存在。并發帶來的問題在享受并發編程帶來的高性能高吞吐量的同時,也會因為并發編程帶來一些意想不到弊端。并發過程中多線程之間的切換調度,上下文的保存恢復等都會帶來額外的線程切換開銷。 0x01 什么是并發 要理解并發首選我們來區分下并發和并行的概念。 并發:表示在一段時間內有多個動作存在。 并行:表示在同一時間點有多個動作同時存在。 例如:此刻我正在寫博客,但...
摘要:并行流與目前,我們對集合進行計算有兩種方式并行流而更加的靈活,我們可以配置線程池的大小確保整體的計算不會因為等待而發生阻塞。 【回顧Future接口 Future接口時java5引入的,設計初衷是對將來某個時刻會發生的結果建模。它建模了一種異步計算,返回了一個執行預算結果的引用。比如,你去干洗店洗衣服,店員會告訴你什么時候可以來取衣服,而不是讓你一直在干洗店等待。要使用Future只需...
摘要:本文介紹和點評上的等并發編程模型。異步更適合并發編程。同步使線程阻塞,導致等待。基本模型這是最簡單的模型,創建線程來執行一個任務,完畢后銷毀線程。響應式編程是一種面向數據流和變化傳播的編程模式。起源于電信領域的的編程模型。 本文介紹和點評JVM上的Thread, Thread Pool, Future, Rx, async-await, Fiber, Actor等并發編程模型。本人經驗...
閱讀 2321·2021-11-24 10:18
閱讀 3386·2021-09-22 15:35
閱讀 3340·2021-09-13 10:37
閱讀 3766·2021-09-06 15:14
閱讀 2071·2021-09-06 15:02
閱讀 2212·2021-09-02 15:11
閱讀 547·2019-08-30 15:53
閱讀 3075·2019-08-29 16:15