1)使用場景:一個對象可能要通路共享資源來完成它所要提供的服務,在多線程情況下,多個這樣的對象在一起就會産生意想不到的後果,比如競争。螢幕就是在這樣的一個對象上設定一個鎖,以保證在給定時間内,隻有一個線程可以執行這個對象上的任何一個方法。
2)例子:我們建立一個日志記錄的類
public class FileLogger {
public synchronized void log(String msg) {
DataOutputStream dos = null;
try {
dos = new DataOutputStream(
new FileOutputStream("log.txt”,true));
dos.writeBytes(msg);
dos.close();
} catch (FileNotFoundException ex) {
//
}
catch (IOException ex) {
//
}
}
}
當一個線程執行到一個對象的同步方法時,它就得到這個對象的一個鎖,在這個方法執行時這個線程就持有這個鎖知道方法運作結束,期間其他線程無法拿到這個鎖,也就無法執行這個方法了。當然同步方法是以運作速度開銷作為代價的。