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

java synchronized和lock

林玟書1年前7瀏覽0評論

在Java中,同時只能由一個線程訪問的代碼塊稱為臨界區。Java提供了synchronized和Lock兩個關鍵字來同步多個線程的訪問臨界區。以下是詳細說明:

synchronized關鍵字

synchronized是Java中最常用的同步關鍵字,它可以被應用于方法或代碼塊中。當一個線程試圖訪問一個被synchronized關鍵字修飾的臨界區時,其他的線程只能等待該線程執行完畢并退出該臨界區。

public class SynchronizedExample {
private int count = 0;
public synchronized void increment() {
count++;
}
}

上面的代碼中,increment方法是一個臨界區,只能同時被一個線程訪問。當一個線程調用increment方法時,其他線程必須等待該線程執行完方法并退出該臨界區。

Lock關鍵字

Lock是Java5提供的一個新的同步機制,它比synchronized更靈活,但使用它需要顯式地獲取和釋放鎖。Lock可以用于控制對共享資源的訪問。

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
private Lock lock = new ReentrantLock();
private int count = 0;
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
}

在上面的代碼中,一個lock對象被創建,它是ReentrantLock類的實例。increment方法獲取鎖,執行count++操作,然后釋放鎖。如果線程不能獲取鎖,則它就在那里等待,直到鎖可用。

總之,鎖是一種更加靈活的同步方式,但它需要更多的代碼來實現同步,因為鎖需要手動獲取和釋放。