熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java SynDemo對象如何解決繼承問題

2013-11-23 18:45:25  來源: Java核心技術 

  Java SynDemo對象剛一出現的時候有很多程序員都很頭痛其實這是完全沒有必要的下面我們就來詳細的學習下有關的相關問題我們發現對於Java SynDemo對象只有synMethord運行了而synMethord卻沒有運行

  這是應為在方法級別的synchronized聲明將lock這個類對象的當前實例所以在synMethord運行結束unlock之前當前Java SynDemo對象實例是無法運行synMethord這種方法級別的synchronized聲明和以下的做法是等同的

  package blogsgpcuster;/** * * @author AaronGuo * */

  public class SynDemo { public void synMethord() {

  synchronized (this) { while (true) { try { Threadsleep();

  Systemoutprintln(synMethord); } catch (InterruptedException

  e) { // TODO Autogenerated catch block

  eprintStackTrace();

  }

  }

  }

  }

  public void synMethord() { synchronized (this) { while (true)

  { try { Threadsleep(); Systemoutprintln(synMethord); }

  catch (InterruptedException e) { // TODO Autogenerated catch block

  eprintStackTrace();

  }

  }

  }

  }

  }

  運行程序結果與上次相同

  如果我們希望分別同步個方法該如何處理?可以參考這個實現

  package blogsgpcuster;/** * * @author AaronGuo * */

  public class SynDemo { private Object flag = new Object();

  private Object flag = new Object(); public void synMethord()

  { synchronized (flag) { while (true) { try { Threadsleep();

  Systemoutprintln(synMethord); } catch (Interrupted

  Exception e) { // TODO Autogenerated catch block

  eprintStackTrace();

  }

  }

  }

  }

  public void synMethord() { synchronized (flag) { while (true)

  { try { Threadsleep(); Systemoutprintln(synMethord); }

  catch (InterruptedException e) { // TODO Autogenerated catch block

  eprintStackTrace();

  }

  }

  }

  }

  }

  運行程序結果如我們預期

  main

  synMethord

  synMethord

  main

  synMethord

  main

  synMethord

  synMethord

  關於Synchronized還有一些其他的話題如static的問題繼承的問題與volatile搭配使用等等在網上都有很詳細的說明這裡就不重復介紹了 以上就是對Java SynDemo對象的詳細介紹


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25677.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.