在Java 中等待執行緒輸出
開發Java 應用程式經常涉及多個執行緒同時運行,需要協調機制來確保正確的流程和資料同步。本文討論了一種特定場景,其中一個執行緒必須等待另一個執行緒的輸出。
在這種情況下,應用程式使用兩個執行緒:一個應用程式邏輯執行緒和一個資料庫存取執行緒。雖然兩個執行緒必須在應用程式的整個生命週期中持續存在並同時運行,但應用程式邏輯執行緒必須先等待,直到資料庫存取執行緒準備就緒。
潛在解決方案
問題給尋找合適的解決方案帶來了挑戰。使用 Thread.join() 不是一個選項,因為資料庫執行緒僅在應用程式關閉期間退出。此外,建立一個空循環來輪詢資料庫準備情況會導致不必要的 CPU 消耗。
CountDownLatch 方法
建議的解決方案利用 CountDownLatch 類,該類使用計數器機制。計數器初始化為1,代表需要完成一個操作。
應用程式執行緒執行
在應用程式邏輯執行緒中,程式碼包括:
CountDownLatch latch = new CountDownLatch(1); latch.await();
latch.await() 方法會阻止進一步執行,直到閂鎖計數器達到0,表示資料庫初始化完成。
資料庫執行緒執行
一次資料庫執行緒完成初始化,它執行:
latch.countDown();
遞減閂鎖計數器以釋放應用程式執行緒的等待。
這種方法有效地同步了兩個線程,確保應用程式邏輯線程繼續進行僅在資料庫線程準備好之後。它為線程協調提供了一種高效且非阻塞的機制,避免了阻塞循環或中斷資料庫線程的缺點。
以上是如何在Java中同步執行緒:應用程式邏輯執行緒如何等待資料庫執行緒完成初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!