欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java重入鎖和非重入鎖

丁秀萍1年前5瀏覽0評論

在Java中,鎖是實現并發(fā)控制的重要手段。Java中的鎖主要可分為兩種:重入鎖和非重入鎖。

所謂重入鎖,顧名思義,就是可以重復獲取的鎖。即當一個線程獲取了該鎖之后,可以再次獲取。在Java中,ReentrantLock就是一個典型的重入鎖實現。下面是重入鎖的使用示例:

public class ReentrantLockDemo {
private static final ReentrantLock lock = new ReentrantLock();
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
lock.lock();
System.out.println(Thread.currentThread().getName() + " get the lock.");
//再次獲取鎖,不會阻塞
lock.lock();
System.out.println(Thread.currentThread().getName() + " get the lock again.");
lock.unlock();
lock.unlock();
}
}).start();
}
}

上述代碼中,當線程獲取鎖之后,再次調用lock方法獲取鎖不會被阻塞,這就是重入鎖的特點。

而非重入鎖則不允許同一線程重復獲取鎖。在Java中,Synchronized就是一種非重入鎖的實現。下面是非重入鎖的使用示例:

public class SynchronizedDemo {
public static void main(String[] args) {
synchronized (SynchronizedDemo.class) {
System.out.println(Thread.currentThread().getName() + " get the lock.");
//再次獲取鎖,會被阻塞
synchronized (SynchronizedDemo.class) {
System.out.println(Thread.currentThread().getName() + " get the lock again.");
}
}
}
}

上述代碼中,當線程已經獲取了鎖之后再次調用synchronized關鍵字獲取鎖,會被阻塞,因為Synchronized是非重入鎖的實現。

總之,重入鎖和非重入鎖是實現并發(fā)控制的兩種方式,根據具體的使用場景選擇合適的鎖實現非常重要。