java mutex的等待/通知机制

   2024-10-02 8180
核心提示:在Java中,Mutex通常使用synchronized关键字或者Lock接口来实现。当一个线程获取了Mutex的锁之后,其他线程就会被阻塞在获取锁的

在Java中,Mutex通常使用synchronized关键字或者Lock接口来实现。当一个线程获取了Mutex的锁之后,其他线程就会被阻塞在获取锁的地方,直到该线程释放了锁。

等待/通知机制可以通过wait()和notify()/notifyAll()方法来实现。当一个线程调用wait()方法时,它会释放锁并进入等待状态。而当另一个线程调用notify()/notifyAll()方法时,等待的线程会被唤醒并且可以重新竞争锁。

下面是一个简单的示例代码,演示了Java中的Mutex的等待/通知机制:

public class MutexExample {    private boolean isLocked = false;    public synchronized void lock() throws InterruptedException {        while (isLocked) {            wait();        }        isLocked = true;    }    public synchronized void unlock() {        isLocked = false;        notify();    }    public static void main(String[] args) {        MutexExample mutex = new MutexExample();        Thread thread1 = new Thread(() -> {            try {                mutex.lock();                System.out.println("Thread 1 has acquired the lock");                Thread.sleep(2000);                mutex.unlock();                System.out.println("Thread 1 has released the lock");            } catch (InterruptedException e) {                e.printStackTrace();            }        });        Thread thread2 = new Thread(() -> {            try {                mutex.lock();                System.out.println("Thread 2 has acquired the lock");                mutex.unlock();                System.out.println("Thread 2 has released the lock");            } catch (InterruptedException e) {                e.printStackTrace();            }        });        thread1.start();        thread2.start();    }}

在这个例子中,MutexExample类表示一个简单的Mutex,其中lock()方法用于获取锁,unlock()方法用于释放锁。在main()方法中,创建了两个线程分别获取和释放Mutex的锁。可以看到,当一个线程获取了锁之后,另一个线程会被阻塞直到第一个线程释放了锁。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号