<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      Java 21把超時玩出2種套路:1個參數讓系統從崩到穩

      0
      分享至


      去年有個做支付系統的讀者私信我,說他們搞了個"優雅降級"的方案,結果超時后用戶看到的是半成品頁面——商品價格加載了,庫存顯示"加載中",下單按鈕卻灰了。用戶瘋狂點擊,訂單系統直接被打穿。我問他怎么設計的,他說:"就加了個timeout啊。"

      這就是典型的把超時當開關用。Java 21的預覽版結構化并發(Structured Concurrency,JEP 453)給了新工具,但工具不會替你回答那個關鍵問題:超時之后,系統該硬失敗,還是該交卷子上寫多少算多少?

      這兩個模式的選擇,直接決定你的系統是"脆斷"還是"韌性"。

      模式一:全失敗——要么全對,要么別答

      先看最保守的打法。代碼很短,但藏著個關鍵假設:

      整個響應必須完整,缺一塊就等于全錯。

      這種場景在金融、醫療、核心交易里常見。你查個賬戶余額,如果風控評分沒算完,寧可告訴用戶"系統繁忙",也不能給個"大概也許可能"的數字。

      實現起來用ShutdownOnFailure配合手動檢查截止時間:

      ```java public T runInScopeWithTimeout(Callable task, Duration timeout) throws Exception { Instant deadline = Instant.now().plus(timeout); try (var scope = new StructuredTaskScope.ShutdownOnFailure()) { var future = scope.fork(task); scope.join(); if (Instant.now().isAfter(deadline)) { throw new TimeoutException("Operation exceeded timeout: " + timeout); } scope.throwIfFailed(); return future.get(); } } ```

      注意這里的順序:scope.join()先等,然后手動判超時,最后throwIfFailed()。有人可能會想,為啥不用joinUntil(deadline)?因為joinUntil到點拋異常,但你還沒檢查任務本身有沒有失敗。這個寫法保證了"超時"和"失敗"兩個維度都被覆蓋。

      代價也很明顯。任何一個子任務慢半拍,整個請求陪葬。適合那種"錯一點就全錯"的業務,不適合用戶能容忍部分信息的場景。

      模式二:部分結果——交卷時間到,寫多少算多少

      再看另一種思路。假設你在拼一個推薦頁:用戶畫像、熱門商品、實時庫存,三個來源。畫像算出來了,熱門商品拿到了,庫存還在轉圈——這時候給用戶看前兩樣,比白屏強。

      這就是joinUntil的用武之地。它不會幫你決定策略,但會把"時間到"這個信號暴露給你:

      ```java public List> executeWithPartialResults( List> tasks, Duration timeout) throws InterruptedException { Instant deadline = Instant.now().plus(timeout); try (var scope = new StructuredTaskScope.ShutdownOnFailure()) { List> subtasks = new ArrayList<>(); for (Callable task : tasks) { subtasks.add(scope.fork(task)); } try { scope.joinUntil(deadline); } catch (TimeoutException ignored) { // 到點了,看看誰跑完了 } List> results = new ArrayList<>(subtasks.size()); for (var subtask : subtasks) { if (subtask.state() == StructuredTaskScope.Subtask.State.SUCCESS) { results.add(Optional.of(subtask.get())); } else { results.add(Optional.empty()); } } scope.shutdown(); return results; } } ```

      這里的關鍵是subtask.state()。超時后,每個子任務的狀態可能是SUCCESSFAILEDUNAVAILABLE——你得自己遍歷,自己決定怎么組裝響應。

      有個細節容易踩坑:scope.shutdown()放在最后,是為了確保沒跑完的任務被中斷。但中斷不等于立刻停,那些任務可能還在后臺掙扎幾秒。如果你的下游服務沒做冪等,這可能會引發重復調用。

      API不會替你做的三件事

      結構化并發把子任務的生命周期管起來了,但設計決策全扔回給你。用這兩個模式之前,你得自己填三個空:

      第一,超時的定義是什么?是從收到請求開始算,還是從第一個子任務啟動開始算?上面的代碼用的是前者,但有些場景需要后者——比如你要等線程池排隊。

      第二,部分結果的排序怎么保證?返回的List>和輸入的List>順序一致,但用戶看到的界面可能需要按優先級重排。這個映射關系得自己維護。

      第三,失敗的任務要不要重試?ShutdownOnFailure遇到第一個異常就觸發關閉,但超時場景下你可能想"能救一個是一個"。這時候得換ShutdownOnSuccess或者自己捕獲異常做降級。

      原文作者提到一點我覺得很準:「joinUntil(...) only tells you the deadline was reached. It does not decide your response policy for you.」翻譯過來就是,API只管打鈴交卷,不管你怎么判分。

      從Java 21到Java 25的坑

      如果你現在就想在生產環境試,得先知道這串代碼是預覽版API。JEP 453在Java 21是預覽,后續版本里StructuredTaskScope的API形狀變了——構造方式、方法名、甚至包路徑都有調整。

      原文作者給了一條遷移指引:看Part 9的Java 21到Java 25遷移指南。我沒找到那篇原文,但經驗是預覽版API的兼容層通常不會自動處理,升級JDK版本時得留人專門掃一遍并發相關的代碼。

      編譯和運行記得加--enable-preview,CI/CD流水線里如果忘了這參數,編譯能通過但運行時會拋UnsupportedClassVersionError,排查起來很煩。

      一個來自真實系統的反饋

      去年某電商大促,有個團隊把商品詳情頁從串行改成結構化并行的部分結果模式。超時設了200ms,三個數據源:主站商品信息、第三方庫存、用戶個性化推薦。上線后發現,推薦服務P99延遲飆到300ms,但頁面沒崩——推薦那塊顯示"為你推薦加載中",用戶照樣能看價格加購物車。

      他們的監控數據很有意思:超時觸發率12%,但用戶投訴率反而比全失敗模式低了40%。產品經理后來提了個需求,能不能讓"加載中"的區塊自動刷新?工程師說,那是另一個故事了。

      你的系統里,有哪些接口是"寧可報錯也不能給半成品",哪些是"給多少算多少"?如果讓你現在重選,哪些會換策略?

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      繼續斬首,再次成功,為何伊朗破不了以色列的斬首戰術?

      繼續斬首,再次成功,為何伊朗破不了以色列的斬首戰術?

      高博新視野
      2026-04-07 08:00:11
      突發!伊朗大規模導彈襲擊,全球市場應聲跳水

      突發!伊朗大規模導彈襲擊,全球市場應聲跳水

      魏家東
      2026-04-07 14:12:21
      “最后期限”將至,特朗普的底牌已被看穿 | 京釀館

      “最后期限”將至,特朗普的底牌已被看穿 | 京釀館

      新京報
      2026-04-07 12:09:08
      鄭麗文剛抵滬,沉默8天的賴清德重申愿和大陸交流,但有一個前提

      鄭麗文剛抵滬,沉默8天的賴清德重申愿和大陸交流,但有一個前提

      李健政觀察
      2026-04-07 18:22:06
      伊朗發布無人機發射視頻 “飛天小摩托”直沖美軍基地

      伊朗發布無人機發射視頻 “飛天小摩托”直沖美軍基地

      新華社
      2026-04-07 17:06:41
      以軍說襲擊了伊朗數十個基礎設施

      以軍說襲擊了伊朗數十個基礎設施

      財聯社
      2026-04-07 19:04:04
      痛心!安徽失蹤6歲女孩,已遇害,兇手是熟人,正臉照曝光

      痛心!安徽失蹤6歲女孩,已遇害,兇手是熟人,正臉照曝光

      魔都姐姐雜談
      2026-04-07 04:25:35
      馬杜羅被捕后暴瘦13公斤

      馬杜羅被捕后暴瘦13公斤

      烽火觀天下
      2026-04-07 12:34:13
      英媒:伊朗消息人士稱伊朗拒絕“臨時停火”

      英媒:伊朗消息人士稱伊朗拒絕“臨時停火”

      新華社
      2026-04-07 20:00:05
      伊朗哈爾克島傳出爆炸聲,疑是美軍發起攻擊?

      伊朗哈爾克島傳出爆炸聲,疑是美軍發起攻擊?

      鳳眼論
      2026-04-07 18:45:51
      安徽失聯女童已遇害,兇手是鄰居,指認現場曝光,父親悲痛發聲

      安徽失聯女童已遇害,兇手是鄰居,指認現場曝光,父親悲痛發聲

      180視角
      2026-04-07 17:29:19
      伊朗、沙特 石化設施遭襲 油價直線飆升 美油漲破116美元

      伊朗、沙特 石化設施遭襲 油價直線飆升 美油漲破116美元

      每日經濟新聞
      2026-04-07 13:41:19
      突發!陳麗華逝世,享年85歲,死因曝光,生前跟遲重瑞立三條規矩

      突發!陳麗華逝世,享年85歲,死因曝光,生前跟遲重瑞立三條規矩

      潮鹿逐夢
      2026-04-07 11:19:31
      深圳一救護車違反調度指令,將患者拉至所屬民營醫院,家屬稱因延誤搶救致死 涉事醫院被處罰

      深圳一救護車違反調度指令,將患者拉至所屬民營醫院,家屬稱因延誤搶救致死 涉事醫院被處罰

      紅星新聞
      2026-04-07 13:56:02
      鄭麗文剛到大陸,不到24小時,賴清德打破沉默,呼吁兩岸展開對話

      鄭麗文剛到大陸,不到24小時,賴清德打破沉默,呼吁兩岸展開對話

      阿纂看事
      2026-04-07 18:13:54
      美軍“拯救飛行員”,差一點就失敗了

      美軍“拯救飛行員”,差一點就失敗了

      中國新聞周刊
      2026-04-07 16:42:40
      特朗普已做好開戰準備?王毅曾警告:中美一旦沖突,結局只有一個

      特朗普已做好開戰準備?王毅曾警告:中美一旦沖突,結局只有一個

      通鑒史智
      2026-04-07 09:52:15
      中惠保險經紀公司董事長史亞政逝世,享年55歲

      中惠保險經紀公司董事長史亞政逝世,享年55歲

      界面新聞
      2026-04-07 14:20:17
      廣東一家制衣廠僅有一位男員工,百余名女同事圍著輪流投喂呵護

      廣東一家制衣廠僅有一位男員工,百余名女同事圍著輪流投喂呵護

      搗蛋窩
      2026-04-07 13:22:20
      博弈白熱化,霍爾木茲要變天了

      博弈白熱化,霍爾木茲要變天了

      南風窗
      2026-04-07 14:58:27
      2026-04-07 20:24:49
      硬核玩家2哈
      硬核玩家2哈
      沉淀中,勿擾
      882文章數 5關注度
      往期回顧 全部

      科技要聞

      滿嘴謊言!OpenAI奧特曼黑料大起底

      頭條要聞

      英媒:伊朗最高領袖病重昏迷 無法參與任何國家決策

      頭條要聞

      英媒:伊朗最高領袖病重昏迷 無法參與任何國家決策

      體育要聞

      官宣簽約“AI球員”,這支球隊被罵慘了...

      娛樂要聞

      女首富陳麗華離世 被曝生前已分好遺產

      財經要聞

      10萬億財政轉移支付,被誰拿走了?

      汽車要聞

      不止是大 極狐首款MPV問道V9靜態體驗

      態度原創

      本地
      健康
      時尚
      公開課
      軍事航空

      本地新聞

      跟著歌聲游安徽,聽古村回響

      干細胞抗衰4大誤區,90%的人都中招

      楊超越之后,全網頭像錦鯉的C位被她搶走了

      公開課

      李玫瑾:為什么性格比能力更重要?

      軍事要聞

      美軍營救飛行員出動155架飛機

      無障礙瀏覽 進入關懷版