在Java中,線程通信的高效同步可以通過以下幾種方式實現:
public synchronized void synchronizedMethod() {
// 同步代碼
}
public void anotherMethod() {
synchronized (this) {
// 同步代碼
}
}
private Lock lock = new ReentrantLock();
public void lockedMethod() {
lock.lock();
try {
// 同步代碼
} finally {
lock.unlock();
}
}
import java.util.concurrent.Semaphore;
private Semaphore semaphore = new Semaphore(3); // 允許最多3個線程同時訪問
public void limitedAccessMethod() {
try {
semaphore.acquire();
// 同步代碼
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release();
}
}
import java.util.concurrent.CountDownLatch;
private CountDownLatch latch = new CountDownLatch(5); // 5個線程需要完成操作
public void waitForOtherThreads() throws InterruptedException {
latch.await(); // 當前線程等待,直到其他線程完成
}
// 其他線程中調用
latch.countDown(); // 完成操作,計數器減1
import java.util.concurrent.CyclicBarrier;
private CyclicBarrier barrier = new CyclicBarrier(5); // 5個線程需要互相等待
public void waitForOtherThreads() throws InterruptedException {
barrier.await(); // 當前線程等待,直到其他線程也調用await()方法
}
// 其他線程中調用
barrier.await(); // 當前線程等待,直到其他線程也調用await()方法
import java.util.concurrent.Exchanger;
private Exchanger<String> exchanger = new Exchanger<>();
public String exchangeData() {
try {
return exchanger.exchange("data"); // 與另一個線程交換數據
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}
通過以上方法,Java提供了多種線程通信和同步機制,可以根據具體需求選擇合適的方法來實現高效同步。