Java中的Mutex(互斥鎖)通常與其他同步器配合使用,以確保在程序中的不同部分之間進行正確的互斥訪問。
一種常見的做法是使用Mutex來保護共享資源,然后在需要訪問這些資源時,先獲取Mutex鎖,然后對資源進行操作,最后釋放Mutex鎖。
另一種常見的做法是在Mutex鎖的基礎上構建更高級別的同步機制,比如使用條件變量(Condition)來控制線程的等待和喚醒。
下面是一個示例代碼,演示了如何使用Mutex和條件變量來實現生產者-消費者模式:
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ProducerConsumer {
private Queue<Integer> queue = new LinkedList<>();
private Lock lock = new ReentrantLock();
private Condition notFull = lock.newCondition();
private Condition notEmpty = lock.newCondition();
public void produce(int value) {
lock.lock();
try {
while (queue.size() >= 10) {
notFull.await();
}
queue.offer(value);
notEmpty.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public int consume() {
int value = 0;
lock.lock();
try {
while (queue.isEmpty()) {
notEmpty.await();
}
value = queue.poll();
notFull.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
return value;
}
}
在上面的示例中,使用ReentrantLock和相關的條件變量來實現了一個生產者-消費者模式。生產者調用produce方法向隊列中生產數據,消費者調用consume方法從隊列中消費數據。通過使用Mutex和條件變量,可以確保生產者和消費者之間的正確同步和互斥操作。