Java 同步代碼塊
同步代碼塊
Java中使用synchronized關(guān)鍵字來聲明同步代碼塊,也就是所謂的“鎖”,它可以有效地防止多 個(gè)線程同時(shí)訪問同一個(gè)代碼塊而造成的沖突。synchrcmized定義代碼塊格式如下:
synchronized(Object) {
//代碼塊
}
共享代碼塊通常放在synchronized定義的區(qū)域內(nèi),當(dāng)線程訪問這個(gè)代碼塊時(shí),首先會(huì)檢測這個(gè) 代碼塊是否被其他線程“鎖住”了,如果已被“鎖住”,則直到其他線程使用完,鎖被釋放了, 這個(gè)代碼塊才可以繼續(xù)被訪問。Ohject類會(huì)標(biāo)識出這個(gè)對象是否被鎖,與這個(gè)類相關(guān)聯(lián)的線程可以 互斥地使用該類對象的鎖。下面看一個(gè)使用synchmnizwl關(guān)鍵字聲明同步代碼塊的示例。
//線程安全
public class ThreadSafe implements Runnable {
private Integer key = 0;
@Override
public void run() {
synchronized (key){
key++;
System.out.println(((Thread) Thread.current()).getName()+":"+ key);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
public static void main(String[] args) {
ThreadSafe threadSafe = new ThreadSafe();
for(int i=0; i<10; i++) {
new Thread(threadSafe, "線程"+ i).start();
}
}
}
點(diǎn)擊加載更多評論>>