天天看點

【面向對象設計基礎】螢幕

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) {

         //

       }

   }

}

當一個線程執行到一個對象的同步方法時,它就得到這個對象的一個鎖,在這個方法執行時這個線程就持有這個鎖知道方法運作結束,期間其他線程無法拿到這個鎖,也就無法執行這個方法了。當然同步方法是以運作速度開銷作為代價的。

繼續閱讀