在Java中,Thread.join()
方法用于等待一個線程執行完畢后再繼續執行當前線程。以下是一些常見的并發編程模式,這些模式中可能會使用到Thread.join()
來實現線程間的協作:
Thread.join()
來確保某個線程在另一個線程之前完成執行。例如:Thread t1 = new Thread(new Runnable() {
public void run() {
// 任務1
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
try {
t1.join(); // 等待t1線程完成
} catch (InterruptedException e) {
e.printStackTrace();
}
// 任務2
}
});
t1.start();
t2.start();
Thread.join()
可以用于等待某個線程完成,以便在該線程完成后執行其他操作。例如:Thread t1 = new Thread(new Runnable() {
public void run() {
// 任務1
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
// 任務2
}
});
t1.start();
t2.start();
try {
t1.join(); // 等待t1線程完成
} catch (InterruptedException e) {
e.printStackTrace();
}
// 在這里執行依賴于t1的任務
Thread.join()
可以用于等待線程池中的某個線程完成。例如:ExecutorService executor = Executors.newFixedThreadPool(2);
Future<?> future1 = executor.submit(new Runnable() {
public void run() {
// 任務1
}
});
Future<?> future2 = executor.submit(new Runnable() {
public void run() {
// 任務2
}
});
try {
future1.get(); // 等待future1對應的線程完成
future2.get(); // 等待future2對應的線程完成
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executor.shutdown();
Thread.join()
可以用于確保數據在生產者和消費者之間正確地傳遞和處理。例如:BlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
Thread producer = new Thread(new Runnable() {
public void run() {
try {
for (int i = 0; i < 10; i++) {
queue.put(i); // 生產數據
Thread.sleep(100); // 模擬生產延遲
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread consumer = new Thread(new Runnable() {
public void run() {
try {
while (true) {
Integer item = queue.take(); // 消費數據
System.out.println("Consumed: " + item);
Thread.sleep(200); // 模擬消費延遲
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
producer.start();
consumer.start();
producer.join(); // 等待生產者線程完成
這些模式只是Java并發編程中的一部分,實際上還有更多的模式和組合方式可以使用Thread.join()
來實現線程間的協作。