Re: [問題] 兩個 Thread 疑問
※ 引述《cyclone350 (老子我最神)》之銘言:
: ※ 引述《popcorny (畢業了..@@")》之銘言:
: : 標題: Re: [問題] 兩個 Thread 疑問
: : 時間: Tue Jan 20 21:16:13 2015
: : Thread不會消失,只會有以下幾種情形
: : 1. Thread都結束了。以你的case就是ExecutorSerivce已經shutdown
: : 如果沒有shutdown,ExecutorService裡面應該都會有Thread.
: : 2. 所有的Thread都被卡住了,有可能是deadlock。
: : 此時不是Thread消失,而是卡死了。
: : 3. 有可能CPU太忙了,所以你submit的job都不會跑到。也許程式沒寫
: : 跑到infinite loop之類的
: : 4. 程式當掉了。那應該整個VM都不見了....
: : 我想貴主管可能以process的思維,認為process可能消失(當掉)
: : 但是Thread都是在同個process,通常非自願停掉,都會存在
: : 所以只要注意1,2,3就好了
: : --
: : 推 cyclone350: 感謝回應。 我有個額外的疑問,這種情況要如何告知主 01/20 23:11
: : → cyclone350: 管不必擔心此問題? 當下我也有給老闆類似的回應。如你 01/20 23:12
: : → cyclone350: 本文提到的 "通常非自願停掉,都會存在",但是得到的 01/20 23:12
: : → cyclone350: 回應會是 "通常? 那萬一消失了呢?" 01/20 23:14
: : → bitlife: 我在想,你主管講的會不會是需要個watchdog?就是不管什麼 01/21 11:47
: : → bitlife: 原因,沒再繼續正常執行(不管是deadlock,error,core dump 01/21 11:48
: : → bitlife: 等),系統管理員要能儘快知道,或者能自動被watchdog再啟動 01/21 11:48
: : → bitlife: ,這個在監控或高可用性等系統下是蠻重要的考量 01/21 11:50
: : 推 Killercat: 所以你老闆是技術底,業務底,專案底,還是老闆底? 01/21 12:00
: : → Killercat: 這四種都有不同的說法 XD 01/21 12:01
: : → popcorny: 這只能再跟主管溝通他的考量點了 XDD 01/21 13:04
: : 推 AmosYang: Killercat 正解 XD 01/21 15:15
: 今天開會後大概知道老闆的疑問應該不是技術型的...
: 可能是偏第六感型的...
: 今天的案例是
: 有一個值的比較是計算出hash後比較是否一樣
: 老闆: 不要用 hash
: cyclone350: ...?
: 老闆: hash值萬一不一樣呢?
: cyclone350: 同樣的input,hash 結果會一樣。
: 老闆: 你能保證每一台機器算出的 hash 值都一樣嗎? 萬一不一樣怎麼辦?
: (意思是同一個 String 在不同電腦 hashcode 會不一樣)
: cyclone350: ......好的, 我把 hash 計算拿掉
: 有點不爽
: 懇求 Killercat 提供完整說法 XD
需要先老闆溝通清楚,
單純看對話,覺得你們不在同一個 context 上面。
我覺得歧異在 hashcode 是怎來的。
一個是 "string" 套 Digest Function 生出來的「值」
一個是 "string".hashCode() 的「值」
前著是固定演算法的,後著就要保留一點。
如果能將條件限制在某些版的本 JVM 實作,那得是一致的
(像 1.2 時變過一次)
目前的版本在 javadoc 有寫出算法:
https://docs.oracle.com/javase/8/docs/api/java/lang/
String.html#hashCode--
http://bit.ly/1ytZLiV
public int hashCode()
Returns a hash code for this string.
The hash code for a String object is computed as
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
using int arithmetic, where s[i] is the ith character of the string,
n is the length of the string, and ^ indicates exponentiation.
(The hash value of the empty string is zero.)
若是要說保留一點,在同一個 JVM 內會一樣。
至於跨了機器後,
若能限定同一個 JVM 相容版本並驗證過版本的演算法一致,
那就會保證一致嚕。
結論,
你可以拿演算法去跟老闆說一樣,但 「前提」要說清楚:
1. JVM 1.2 之後到今年的版本
2. 不保證未來是否有不相容更新(沒有人可以保證未來)
Stackoverflow 也有這樣的討論
Consistency of hashCode() on a Java string
http://stackoverflow.com/questions/785091/
consistency-of-hashcode-on-a-java-string
http://bit.ly/1yu2sRA
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.128.164
※ 文章網址: https://www.ptt.cc/bbs/java/M.1421891907.A.F0C.html
※ 編輯: qrtt1 (220.130.128.164), 01/22/2015 10:00:21
推
01/22 11:37, , 1F
01/22 11:37, 1F
→
01/22 11:37, , 2F
01/22 11:37, 2F
推
01/22 13:04, , 3F
01/22 13:04, 3F
→
01/22 13:05, , 4F
01/22 13:05, 4F
→
01/22 13:05, , 5F
01/22 13:05, 5F
→
01/22 13:06, , 6F
01/22 13:06, 6F
→
01/22 13:06, , 7F
01/22 13:06, 7F
→
01/22 13:06, , 8F
01/22 13:06, 8F
→
01/22 13:09, , 9F
01/22 13:09, 9F
推
01/22 14:06, , 10F
01/22 14:06, 10F
→
01/22 14:06, , 11F
01/22 14:06, 11F
→
01/22 14:07, , 12F
01/22 14:07, 12F
→
01/22 14:07, , 13F
01/22 14:07, 13F
→
01/22 17:42, , 14F
01/22 17:42, 14F
討論串 (同標題文章)