Fw: [問題] 想請問一段多執行緒的程式碼

看板Programming作者 (coolcomm)時間11年前 (2013/02/05 19:37), 編輯推噓12(12037)
留言49則, 12人參與, 最新討論串1/1
※ [本文轉錄自 java 看板 #1H0J_st5 ] 作者: coolcomm (coolcomm) 看板: java 標題: [問題] 想請問一段多執行緒的程式碼 時間: Thu Jan 24 22:06:44 2013 以下程式碼節錄自org.apache.commons.lang3.builder.HashCodeBuilder private static final ThreadLocal<Set<IDKey>> REGISTRY = new ThreadLocal<>(); static void register(Object value) { synchronized(HashCodeBuilder.class) { if (getRegistry() == null) { REGISTRY.set(new HashSet<IDKey>()); } } getRegistry().add(new IDKey(value)); } 想請問 ThreadLocal不是thread-safe嗎 為甚麼還要加上synchronized關鍵字? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.163.82.56 另外 synchronized(HashCodeBuilder.class) 有什麼特別含意嗎 為什麼不直接寫 synchronized(this)... ※ 編輯: coolcomm 來自: 1.163.82.56 (01/24 22:12)

01/24 22:24, , 1F
因為 register 是 static method,沒有 this
01/24 22:24, 1F

01/24 22:26, , 2F
這寫法在 static method 是很常見的作法 http://goo.gl/ioAvZ
01/24 22:26, 2F

01/24 22:29, , 3F
所以和static void synchronized register完全一樣囉?
01/24 22:29, 3F

01/24 23:16, , 4F
是,但你上面的例子還有個 getRegistry 在外面,所以不同
01/24 23:16, 4F

01/24 23:21, , 5F
嗯 這部分了解了
01/24 23:21, 5F
※ 編輯: coolcomm 來自: 1.163.82.56 (01/24 23:24)

01/26 15:37, , 6F
This is check then act scenario, which is not
01/26 15:37, 6F

01/26 15:39, , 7F
thred safe.
01/26 15:39, 7F
囧 我發現我忘了貼getRegistry()的定義 static Set<IDKey> getRegistry() { return REGISTRY.get(); } 就這樣一行 ※ 編輯: coolcomm 來自: 36.224.126.155 (02/05 19:37)

02/05 19:37, , 8F
有人能提供其他答案嗎?
02/05 19:37, 8F

02/06 15:07, , 9F
所以說你看這種程式碼不會看到起瘋嗎?!
02/06 15:07, 9F

02/06 15:10, , 10F
要是跑不動要怎麼DEBUG?!我可能會把電腦
02/06 15:10, 10F

02/06 15:11, , 11F
砸了,反正編譯器那麼多種不必要一定得用
02/06 15:11, 11F

02/06 15:11, , 12F
哪一種
02/06 15:11, 12F

02/06 18:15, , 13F
樓上又在幹嘛啦= =
02/06 18:15, 13F

02/06 18:48, , 14F
我猜樓上應該是不懂物件導向吧 所以才會
02/06 18:48, 14F

02/06 18:48, , 15F
覺得Java語法難懂
02/06 18:48, 15F

02/06 18:50, , 16F
雖然Java語法出了名的囉嗦 但其實非常好讀
02/06 18:50, 16F

02/06 18:54, , 17F
c大你跟他認真了你輸了
02/06 18:54, 17F

02/06 19:00, , 18F
= =
02/06 19:00, 18F

02/06 20:15, , 19F
C\C++不就最早的物件導向的始祖嗎?!
02/06 20:15, 19F

02/06 20:16, , 20F
不過我承認我位夠班,不過學了一堆理論
02/06 20:16, 20F

02/06 20:17, , 21F
卻不會任何一種程式語言也是沒用
02/06 20:17, 21F

02/06 20:19, , 22F
就像台大哲學和交大資工,你會選哪一個?!
02/06 20:19, 22F

02/06 20:22, , 23F
還有你們認識施振榮和施崇棠嗎?!你們比
02/06 20:22, 23F

02/06 20:23, , 24F
他們強嗎?!
02/06 20:23, 24F
※ 編輯: coolcomm 來自: 1.163.86.92 (02/06 20:46)

02/06 21:51, , 25F
看不懂K的重點是什麼.....
02/06 21:51, 25F

02/06 22:01, , 26F
視為雜訊略過
02/06 22:01, 26F

02/07 13:04, , 27F
C是物件導向的始祖?我笑了XD
02/07 13:04, 27F

02/07 15:35, , 28F
樓上,你那麼厲害的話麻煩用一台沒灌任何
02/07 15:35, 28F

02/07 15:36, , 29F
作業系統的電腦,然後灌DOS,在DOS的環境
02/07 15:36, 29F

02/07 15:38, , 30F
下寫一套倚天中文系統的ET系列的可顯示
02/07 15:38, 30F

02/07 15:39, , 31F
中文字的系統,在寫CW系列的文書處理程式
02/07 15:39, 31F

02/07 15:40, , 32F
或是PE2也行,還是用COBOL來寫商用文書處
02/07 15:40, 32F

02/07 15:41, , 33F
理系統,如果妳會我就讓你捅屁眼
02/07 15:41, 33F

02/07 16:06, , 34F
C++ 的物件導向是從 Simula 語言來的
02/07 16:06, 34F

02/07 16:12, , 35F
真正的高手灌什麼dos 用蝴蝶就夠了
02/07 16:12, 35F

02/07 16:29, , 36F
先別管king了 有沒有人能回答我原本的問題啦=3=
02/07 16:29, 36F
※ 編輯: coolcomm 來自: 1.163.82.9 (02/07 16:31)

02/07 16:33, , 37F
PURPOSE你很謙虛啊!給你一個推
02/07 16:33, 37F

02/07 21:18, , 38F
屁精請不要亂入
02/07 21:18, 38F

02/07 22:11, , 39F
我的屁比你的嘴還香勒
02/07 22:11, 39F

02/07 22:18, , 40F
我知道我才疏學淺,不過我的精神就是不屈
02/07 22:18, 40F

02/07 22:19, , 41F
不饒,我看過版主的發言,這個版想必在成
02/07 22:19, 41F

02/07 22:20, , 42F
立時砲火連連,就像是宇宙大爆炸,混屯初
02/07 22:20, 42F

02/07 22:21, , 43F
開,然後應該有人被桶進精神病院
02/07 22:21, 43F

02/07 22:21, , 44F
不過程式這東西還是化繁為簡的好
02/07 22:21, 44F

02/07 22:23, , 45F
不知道這版有沒有人問候別人的老木?!
02/07 22:23, 45F

02/07 22:39, , 46F
如果你是來跟別人討論而不是亂放話混亂版
02/07 22:39, 46F

02/07 22:39, , 47F
面就會有人討論了啊@@
02/07 22:39, 47F

02/08 07:04, , 48F
請把不屈不撓的精神拿去讀點書,加油,好嗎
02/08 07:04, 48F

02/08 16:49, , 49F
不屈不撓精神放在嘴上,不太好.歇會兒吧
02/08 16:49, 49F
文章代碼(AID): #1H4ExbqH (Programming)