Thread.join()方法用于等待線程執行完成。在使用同步工具類時,我們通常關心的是如何確保多個線程在訪問共享資源時的正確性和安全性。Thread.join()本身并不直接提供同步功能,但它可以與同步工具類結合使用來實現線程間的協作。
例如,假設我們有兩個線程ThreadA和ThreadB,我們希望ThreadB在ThreadA執行完成之后再繼續執行。我們可以使用Thread.join()方法來實現這一點。同時,為了確保在ThreadA和ThreadB之間正確地同步訪問共享資源,我們可以使用synchronized關鍵字或其他同步工具類(如ReentrantLock、Semaphore等)。
下面是一個簡單的示例,展示了如何使用Thread.join()和synchronized關鍵字來同步線程:
public class SynchronizedExample {
private static final Object lock = new Object();
public static void main(String[] args) throws InterruptedException {
Thread threadA = new Thread(() -> {
synchronized (lock) {
System.out.println("Thread A acquired lock");
try {
// 模擬耗時操作
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread A released lock");
}
});
Thread threadB = new Thread(() -> {
try {
// 等待線程A執行完成
threadA.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread B executed after Thread A");
});
threadA.start();
threadB.start();
}
}
在這個示例中,我們使用了一個名為lock的對象作為同步鎖。ThreadA和ThreadB都使用synchronized關鍵字來獲取和釋放這個鎖。ThreadB使用threadA.join()方法來等待ThreadA執行完成。這樣,我們可以確保在ThreadA和ThreadB之間正確地同步訪問共享資源。