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