CodeGym
促銷
學習
課程
任務
問卷 & 測驗
遊戲
說明
行程
社群
用戶
論壇
聊天
文章
成功故事
動態
評價
訂閱
淺色主題

課程

  • 評論
  • 關於我們
開始
開始學習
立即開始學習
  • My Progress
  • Courses
  • 任務地圖
  • 課程
  • Deadlock:成因、範例、排除

    JAVA 25 SELF
    等級 53,課程 0
    在本講座中,我們將解析什麼是 Java 中的執行緒互相封鎖(deadlock)、為何會發生,以及其成立所需的四個條件。透過含有 synchronized 的實作範例示範如何重現問題,接著學習預防策略:統一資源取得順序、使用帶逾時的 ReentrantLock.tryLock、縮短臨界區、避免多餘的巢狀鎖。也會介紹如何用 Thread Dump 與 jstack 進行診斷、辨識 BLOCKED/ WAITING 狀態,最後附上檢查清單與常見錯誤。
    可用
  • Livelock 與 Starvation:定義與範例

    JAVA 25 SELF
    等級 53,課程 1
    解析並行異常 Livelock 與 Starvation:它們與 Deadlock 有何不同、在程式碼與日誌中如何呈現。展示 Java 範例:『有禮貌的工人』(活鎖)以及由優先權與不公平鎖導致的飢餓。學習如何偵測問題(日誌、 Thread dump、 VisualVM、 Java Mission Control)並防範:在重試前加入隨機延遲( Thread.sleep)、採用非阻塞演算法、透過帶有 fairness 旗標的 ReentrantLock( new ReentrantLock(true))取得公平鎖、謹慎設計臨界區,並避免濫用 setPriority() 與 synchronized。
    可用
  • 執行緒安全的集合:ConcurrentHashMap 與其他

    JAVA 25 SELF
    等級 53,課程 2
    在這堂課我們將說明為什麼一般的集合( ArrayList、 HashMap)在多執行緒環境中是危險的,以及套件 java.util.concurrent 提供了哪些執行緒安全的替代方案: ConcurrentHashMap、 CopyOnWriteArrayList、 ConcurrentLinkedQueue、基於跳躍表(skip list)的結構與 BlockingQueue。我們也會討論像 merge、 putIfAbsent、 computeIfAbsent 等原子操作,並與 Collections.synchronizedMap 比較,最後給出實務範例與常見錯誤(弱一致性的迭代器、非原子的操作序列等)。
    可用
  • AtomicInteger、AtomicReference:原子操作

    JAVA 25 SELF
    等級 53,課程 3
    為什麼在多執行緒中 i ++ 不可靠、什麼是原子操作,以及套件 java.util.concurrent.atomic 如何提供這些操作。解析 AtomicInteger 與 AtomicReference、方法 incrementAndGet()、 compareAndSet(...)、內部機制 CAS(Compare-And-Swap),以及何時該選擇 synchronized、何時該選擇 LongAdder。最後是常見錯誤:複雜操作、ABA,以及巢狀物件的執行緒安全。
    可用
  • 多執行緒程式的診斷與除錯

    JAVA 25 SELF
    等級 53,課程 4
    如何使用 Thread Dump 搭配 jstack、VisualVM 與 IDE 進行擷取與閱讀,辨識執行緒狀態( RUNNABLE、 BLOCKED、 WAITING)並找出互鎖。還會講解在 Java Mission Control 與 Java Flight Recorder 中的執行緒監控、日誌實務(執行緒名稱、進入/離開 synchronized)、最小化鎖定、使用 CountDownLatch 進行併發測試,以及解析真實的 deadlock 案例。最後 — 常見錯誤與避免方法。
    可用
  • 平行運算入門

    JAVA 25 SELF
    等級 54,課程 0
    在本講次中,我們會釐清多執行緒與平行運算的差異:哪些情況重視回應性,哪些情況在多核心上能帶來實際加速。會討論如何透過 Thread 建立執行緒、實作 Runnable,以及使用高階的執行緒池 ExecutorService;也會看一個陣列加總的簡單範例,分析平行運算何時有幫助、何時反而妨礙,以及常見問題:資料競爭、透過 synchronized 進行同步、相互鎖定與負載平衡。最後——提供比較表與情境視覺化。
    可用
  • ExecutorService、Callable、Future:啟動任務

    JAVA 25 SELF
    等級 54,課程 1
    用專業的方式實作多執行緒:把任務交給 ExecutorService,而不是手動建立 Thread;管理執行緒池、佇列與生命週期( shutdown()、 shutdownNow())。說明 Runnable 與 Callable<T> 的差異,透過 Future 及其方法( get()、 isDone()、 cancel(...)、 isCancelled())取得結果。示範啟動多個任務、 invokeAll/ invokeAny、處理 ExecutionException,以及常見錯誤。
    可用
  • 平行串流:語法與應用

    JAVA 25 SELF
    等級 54,課程 2
    我們來弄清楚如何用一行程式就把一般資料串流切換為平行處理——透過 parallelStream() 或 .parallel();了解在 ForkJoinPool.commonPool() 底層發生了什麼;何時平行化能真正加速運算(大型集合、「重」操作),以及哪些情況下反而會變慢。會展示過濾、彙總、排序、效能量測的範例,並說明典型錯誤:在 forEach 中的副作用、順序保留、集合選擇,以及平行度的設定。
    可用
  • ForkJoinPool 與 RecursiveTask:遞迴任務

    JAVA 25 SELF
    等級 54,課程 3
    Java 平行運算實作指南:任務池 ForkJoinPool 與遞迴任務 RecursiveTask<T>/ RecursiveAction 如何運作,work-stealing(工作竊取)演算法有何助益,如何透過 fork() 拆分任務,並在 compute() 中用 join() 匯總結果。將說明如何用 pool.invoke() 啟動,提供陣列加總與尋找最大值的範例、 ForkJoinPool 在 parallelStream() 中的角色,以及常見錯誤與避免方式。
    可用
  • 並行程式設計最佳實務

    JAVA 25 SELF
    等級 54,課程 4
    Java 並行程式設計的實用指南:何時該使用 ExecutorService,在哪些情況 parallelStream 有幫助,以及哪些任務需要 ForkJoinPool。我們將討論使用 ConcurrentHashMap/ CopyOnWriteArrayList 與原子類( AtomicInteger)來實現執行緒安全,透過 System.nanoTime() 與 JMH 進行效能量測,如何處理 Future.get() 與 ForkJoinTask 的例外,正確回應 InterruptedException,以及日誌記錄( Thread.currentThread().getName())與測試( Awaitility)的技巧。最後附上工具選擇表與常見錯誤。
    可用
  • CompletableFuture 簡介

    JAVA 25 SELF
    等級 55,課程 0
    在本講座中,我們會解析為什麼同步程式碼會導致阻塞、 Future 有哪些限制(例如會阻塞的 get()),以及來自套件 java.util.concurrent 的類別 CompletableFuture 如何改變處理非同步的風格。我們會練習使用 supplyAsync 在背景啟動任務,透過 thenAccept/ thenApply 訂閱結果,討論 ForkJoinPool 的角色與常見錯誤:在主執行緒中使用 get()/ join()、未透過 exceptionally/ handle 處理錯誤等。
    可用
  • 非同步任務:thenApply、thenAccept、thenRun

    JAVA 25 SELF
    等級 55,課程 1
    透過 CompletableFuture 拆解非同步計算的啟動與組合:如何透過 supplyAsync 與 runAsync 啟動任務,處理器 thenApply、 thenAccept、 thenRun 有何差異,以及何時選擇其非同步版本 thenApplyAsync/ thenAcceptAsync/ thenRunAsync。也會談到執行緒( ForkJoinPool 或你的 Executor)、結果型別( CompletableFuture<T>、 CompletableFuture<Void>)與常見錯誤:阻塞的 get()/ join()、缺少 exceptionally/ handle/ whenComplete 的錯誤處理,以及嘗試在 thenRun 內使用結果。
    可用
  • 1
  • ...
  • 23
  • 24
  • 25
  • 26
  • 27
  • ...
  • 30
學習
  • 註冊
  • Java 課程
  • 題目協助
  • 價格
  • Java 語法
社群
  • 用戶
  • 文章
  • 論壇
  • 聊天
  • 成功故事
  • 動態
  • 聯盟計畫
公司
  • 關於我們
  • 聯絡方式
  • 評價
  • 新聞中心
  • CodeGym for EDU
  • 常見問題
  • 支援
CodeGymCodeGym 是一門從零開始學習 Java 程式設計的線上課程。這門課程是初學者精通 Java 的完美方式。它包含超過 1200 題、具即時檢驗功能,以及涵蓋 Java 基礎理論的必要範圍。為了幫助你在學習上成功,我們實作了一系列激勵功能:測驗、程式專案、關於有效學習的內容,以及 Java 開發者職涯相關內容。
追蹤我們
介面語言
English Deutsch Español हिन्दी Français Português Polski বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia
繁體中文
Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
"程式設計師是培養出來的,不是天生的" © 2026 CodeGym
MastercardVisa
"程式設計師是培養出來的,不是天生的" © 2026 CodeGym