java中synchronized的用法

來源:互聯網
上載者:User

1. 把synchronized當作函數修飾符時
Public synchronized void methodAAA()
{
  //….
}
它等同於
public void methodAAA()
{
    synchronized (this)      // (1)
    {
      //…..
  }
}
它鎖定的是調用這個同步方法對象

2.同步塊,範例程式碼如下:
public void method3(SomeObject so)
{
  synchronized(so)
  {
      //…..
  }
}
當有一個明確的對象作為鎖時,就可以這樣寫程式,但當沒有明確的對象作為鎖,只是想讓一段代碼同步時,可以建立一個特殊的instance變數(它得是一個對象)來充當鎖:
class Foo implements Runnable
{
  private byte[] lock = new byte[0]; // 特殊的instance變數
  Public void methodA()
  {
      synchronized(lock) { //… }
  }
  //…..
}
  註:零長度的byte數組對象建立起來將比任何對象都經濟――查看編譯後的位元組碼:產生零長度的byte[]對象只需3條作業碼,而 Object lock = new Object()則需要7行作業碼。
3.將synchronized作用於static 函數,範例程式碼如下:
Class Foo
{
  public synchronized static void methodAAA()   // 同步的static 函數
  {
  //….
    }

    public void methodBBB()
    {
      synchronized(Foo.class)   // class literal(類名稱字面常量)
    }
}

  代碼中的methodBBB()方法是把class literal作為鎖的情況,它和同步的static函數產生的效果是一樣的,取得的鎖很特別,是當前調用這個方法的對象所屬的類(Class,而不再是由這個Class產生的某個具體對象了)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.