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之间正确地同步访问共享资源。