我的評(píng)論
re: 誰(shuí)能幫忙解釋一下為什么這個(gè)程序會(huì)死鎖?[未登錄](méi) kafka0102 2010-08-05 20:58
死循環(huán)的代碼在hashmap的transfer方法:
void transfer(final Entry[] newTable) {
final Entry[] src = table;
final int newCapacity = newTable.length;
final long time1 = System.currentTimeMillis();
for (int j = 0; j < src.length; j++) {
Entry<K,V> e = src[j];
if (e != null) {
src[j] = null;
do {
final Entry<K,V> next = e.next;
final int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
}
}
}
我的分析是:死循環(huán)就在while中,對(duì)同一個(gè)舊table中的e,一個(gè)線程執(zhí)行了 e.next = newTable[i];(還沒(méi)到 e = next;),另一個(gè)才到 final Entry<K,V> next = e.next;,結(jié)果后到的線程接著執(zhí)行e = next;造成e=e.next,死循環(huán)了。
void transfer(final Entry[] newTable) {
final Entry[] src = table;
final int newCapacity = newTable.length;
final long time1 = System.currentTimeMillis();
for (int j = 0; j < src.length; j++) {
Entry<K,V> e = src[j];
if (e != null) {
src[j] = null;
do {
final Entry<K,V> next = e.next;
final int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
}
}
}
我的分析是:死循環(huán)就在while中,對(duì)同一個(gè)舊table中的e,一個(gè)線程執(zhí)行了 e.next = newTable[i];(還沒(méi)到 e = next;),另一個(gè)才到 final Entry<K,V> next = e.next;,結(jié)果后到的線程接著執(zhí)行e = next;造成e=e.next,死循環(huán)了。
re: 搜索拼音輸入法研究[未登錄](méi) kafka0102 2009-05-11 10:50
ding一個(gè)
re: 消除實(shí)現(xiàn)繼承和面向接口編程 kafka0102 2007-09-03 22:17
@Matthew Chen
是的,對(duì)于繁雜的對(duì)象模型,如果繼承層次太多就會(huì)很難把握具體的調(diào)用,也更難于修改。對(duì)于我舉的例子,也許并不漂亮,這里只是為了說(shuō)明一下問(wèn)題。實(shí)際上,我看到很多代碼有在基類拋出異?;蜃宇悞伋霎惓5那闆r,因?yàn)樽髡呦M橄蟪龅墓膊僮髦皇菍?duì)其某個(gè)或某幾個(gè)子類不適用,而作者因?yàn)閷?shí)際需求又希望將方法作為公共方法。
是的,對(duì)于繁雜的對(duì)象模型,如果繼承層次太多就會(huì)很難把握具體的調(diào)用,也更難于修改。對(duì)于我舉的例子,也許并不漂亮,這里只是為了說(shuō)明一下問(wèn)題。實(shí)際上,我看到很多代碼有在基類拋出異?;蜃宇悞伋霎惓5那闆r,因?yàn)樽髡呦M橄蟪龅墓膊僮髦皇菍?duì)其某個(gè)或某幾個(gè)子類不適用,而作者因?yàn)閷?shí)際需求又希望將方法作為公共方法。
re: 在spring中使用Timer kafka0102 2007-07-20 08:55
不好意思,記錯(cuò)了,以為Spring也是opnesymphony 的東東了。。我對(duì)Quartz也不是很了解,它在做復(fù)雜的任務(wù)調(diào)度方面要更好些,因?yàn)樗梢栽谂渲梦募信渲谜{(diào)度策略,而Timer則只能寫在TimerTask中。
re: 使用DbUnit進(jìn)行持久化測(cè)試(1) kafka0102 2007-06-14 09:19
有誰(shuí)知道如何在文章中附上文件?
re: 要范型,要DAO,更要范型DAO kafka0102 2007-05-03 22:06
發(fā)表文章時(shí),代碼不是直接貼進(jìn)去的,而是選擇編輯器中的“代碼”選項(xiàng)(應(yīng)該在編輯菜單的最后一個(gè)位置),然后根據(jù)彈出來(lái)的對(duì)話框進(jìn)行操作就行了。
re: 要范型,要DAO,更要范型DAO kafka0102 2007-04-17 09:20
都要瘋掉了。昨晚第一遍寫的時(shí)候,直接在編輯器里做,結(jié)果添加代碼框出不來(lái),IE死掉了。第二遍在word里寫,結(jié)果發(fā)表時(shí)不能連接服務(wù)器。好吧,一大早來(lái)做,結(jié)果從word到編輯器轉(zhuǎn)換時(shí),格式都亂了。就這樣了,沒(méi)心情再改了。
re: JavaScript中定義對(duì)象的四種方式 kafka0102 2007-04-09 19:11
學(xué)藝不精,還需努力!
re: JavaScript中定義對(duì)象的四種方式 kafka0102 2007-04-08 20:28
確實(shí)不對(duì),我試了一下,name屬性根本沒(méi)有起作用,看來(lái)外部方法introduceSelf()需要添加參數(shù)name才行!
re: 一道java算法題 kafka0102 2007-03-13 16:03
我本身也不會(huì)多少算法題,我想的是,這樣的題要求的是實(shí)現(xiàn)技巧,而不單單是結(jié)果。這道題蠻可以for循環(huán)嵌套,將得到的每一個(gè)排列放到Set中讓Set過(guò)濾,但這樣效率極低,而且Set如果自己實(shí)現(xiàn)(比如TreeSet)也很復(fù)雜。做了這么多年Java,感覺就是基本的數(shù)據(jù)結(jié)構(gòu)還行,算法方面就差很多(也許沒(méi)有使用機(jī)會(huì)吧),但算法是很基礎(chǔ)的東西,值得好好學(xué)習(xí)。
re: 動(dòng)態(tài)代理的一些思考和疑問(wèn):(疑問(wèn)還沒(méi)解決) kafka0102 2006-11-14 00:33
實(shí)際使用的代理對(duì)象應(yīng)該通過(guò)Proxy.newProxyInstance這樣的方法實(shí)現(xiàn),而代理對(duì)象調(diào)用的就是繼承了InvocationHandler的類的public Object invoke(Object proxy, Method method, Object[] args)方法,這里的Object proxy應(yīng)該就是代理對(duì)象本身。如果你的method.invoke(this.delegate, args); 改成method.invoke(proxy, args);將出現(xiàn)不斷的循環(huán)。
re: 玩玩Spring之初章 kafka0102 2006-05-04 18:45
不過(guò)是個(gè)程序員,做程序不過(guò)混口飯吃,何必那么張狂?對(duì)這么一個(gè)框架有了些認(rèn)識(shí)就牛啊?最看不上你這種人了。有時(shí)間多做做程序,多學(xué)學(xué)什么叫做謙虛。大音稀聲。盡管我是個(gè)80后的人,但我可以告訴你,80后根本配不上美國(guó)50年代的一代??宓舻牟粏问沁@一代,是這一社會(huì)。