Java 中的同步鎖和重入鎖是兩種線程同步解決方案。
同步鎖是一種可重入互斥鎖,用于在不同線程之間同步訪問共享資源。當(dāng)一個(gè)線程獲取到鎖時(shí),其他線程會(huì)等待鎖的釋放,直到獲取到鎖的線程釋放鎖。下面是同步鎖的示例代碼:
public class SyncLockTest { private int count = 0; private final Object lock = new Object(); public void increment() { synchronized(lock) { // 獲取鎖 count++; } // 釋放鎖 } }
重入鎖是一種可重入的、并發(fā)性較高的同步鎖。與同步鎖不同,重入鎖可實(shí)現(xiàn)手動(dòng)加鎖和解鎖,提高了代碼的靈活性和效率。下面是重入鎖的示例代碼:
import java.util.concurrent.locks.ReentrantLock; public class ReentrantLockTest { private int count = 0; private final ReentrantLock lock = new ReentrantLock(); public void increment() { lock.lock(); // 獲取鎖 try { count++; } finally { lock.unlock(); // 釋放鎖 } } }
需要注意的是,重入鎖必須手動(dòng)加鎖和解鎖,否則可能會(huì)導(dǎo)致死鎖的情況。另外,重入鎖也支持公平鎖和非公平鎖。