@asdf
獨占鎖既可以是悲觀的也可以是樂觀的呀,用CAS實現的獨占鎖不就是樂觀的?
synchronized使用的內置鎖和ReentrantLock這種顯式鎖在java6以后性能沒多大差異,在更新的版本中內置鎖只會比顯式鎖性能更好。這兩種鎖都是獨占鎖,java5以前內置鎖性能低的原因是它沒做任何優化,直接使用系統的互斥體來獲取鎖。顯式鎖除了CAS的時候利用的是本地代碼以外,其它的部分都是Java代碼實現的,在后續版本的Java中,顯式鎖不太可能會比內置鎖好,只會更差。使用顯式鎖的唯一理由是要利用它更多的功能。
博主關于hanppens-before規則的第5條有錯誤。
樓主,你好。我自己在linux下試驗的時候發現用%JAVA_HOME%不行,必須改成java home的絕對路徑才行,不知道是什么原因。
這個Axman過于自大了。子類的對象為什么就不能和父類的對象equals?lsp原則忘記了嗎?
re: 正方形不是長方形的終極解決辦法 teasp 2007-09-21 17:51
樓上說得很有道理,最關鍵的問題是我們不知道哪些特性才是一個類的標志。因為現實世界太復雜了,簡直不可模仿
re: 正方形不是長方形的終極解決辦法 teasp 2007-09-20 21:49
沒看過相關討論的可以看看這個先:
長方形有二個屬性長和寬。并有一個設置長的方法和設置寬的方法,還有一個求面積的方法.
像下面
private int length;
private int width;
public void setLength(int lenght) {
this.length = lenght;
}
public void setWidth(int width) {
this.width= width;
}
public int getArea() {
return this.length * this.width;
}
如果說正方形是長方形的子類。為了保證正方形長和寬相等,那對應于正方形的二設置長寬的個方法就得改成
public void setLength(int lenght) {
this.length = lenght;
this.width= lenght;
}
public void setWidth(int width) {
this.length = width;
this.width= width;
}
那我們想想用戶使用時候的情景。 我們都知道長方形的面積等于長與寬的積。那當我們用長方形的時候我們會這樣用
Rectangle rectangle = new Rectangle();
rectangle.setLength(5);
rectangle.setWidth(4);
我們想知道面積是多少我們就可以
rectangle.getArea();
得到的是20,當然結果是非常正確的。
但想想如果我們把一個正方形的實例給用戶用的時候會怎么樣
Rectangle rectangle = new Square(); //注意,這里體顯代換原則。用戶根本不知道真正的實例是正方形,用戶只知道長方形的事情。
rectangle.setLength(5);
rectangle.setWidth(4);
我們想知道面積是多少我們就可以
rectangle.getArea();
得到的結果卻是 16 ,這違背了長方形的面積是長與寬之積的原則。用戶就不會明白為什么我設置了長是5寬是4得到的答案卻是16 ?? 與前提不符
所以正方形不能代替長方形出現在這個地方。
也就是說正方形不應當看作是長方形的子類。
re: Java中的++操作 teasp 2007-09-20 21:40
@Jack L
是的。我猜錯了,呵呵
re: JAVA操作windows注冊表 teasp 2007-09-20 21:39
good.
re: 正方形不是長方形的終極解決辦法 teasp 2007-09-20 21:33
@黑蝙蝠
呵呵,我不知道你有沒有看過關于正方形不是長方形的討論,網上有的,另外《Java與模式》里面第79頁左右就是講這個問題的。如果你看過相關的內容,應該能明白我要表達的意思了。
re: 正方形不是長方形的終極解決辦法 teasp 2007-09-20 18:45
@GandofYan
兄弟啊,Square只有一個構造方法,你說的這句有語法錯誤哦。
re: Java中的++操作 teasp 2007-09-20 18:03
暈,沒想到這么多人評論了。。。
re: Java中的++操作 teasp 2007-09-20 18:02
二樓的實驗也非常有意義。沒想到c和java在這一點上還有區別,呵呵,學到了。不過有一點不太同意二樓說的,我覺得在c里面應該是 i=i++;和i=(i++);的區別,前者不會加1,后者會,而java中這兩者是一樣的。我說的僅僅是猜測,并沒有實驗過,說錯了見諒
re: 微軟真惡心 teasp 2007-09-20 17:43
呵呵,樓上誤會了哦,這不是政治吧,我是覺得微軟那么做不恰當啊
re: 查看手機對JAVA的支持信息 teasp 2007-09-20 16:56
感覺你懂的好多啊,我現在還在入門中。。。
re: 男人25歲前的忠告 teasp 2007-09-20 13:14
很好
re: 微軟真惡心 teasp 2007-09-20 11:32
china是有別的意思,可是russia沒有別的意思啊
re: 軟件開發#前途 teasp 2007-09-19 12:07
有一點我的想法不一樣,我覺得年紀越大積累的知識越多,學習能力會更強,有很多東西需要積累足夠多的知識才行。
re: java里的clone teasp 2007-09-19 11:56
非常感謝樓上的回復,雖然你說的我知道。應該是我沒表述清楚,第一段里的“沒法繼承”應該是“沒有繼承”。我的意思是由于其他類都是繼承Object,所以應該繼承了Object的clone()方法,只是如果這個類沒有實現cloneable的話,在調用clone()時會拋異常。而實際情況是,如果沒有實現cloneable并重寫clone()方法,壓根就沒clone()方法可以調用,這很奇怪。
re: java里的clone teasp 2007-09-18 12:07
又看了一下,ArrayList是淺clone