Re: [問題] 兩個 Thread 疑問

看板java作者 (有些事,有時候。。。)時間9年前 (2015/01/22 09:58), 9年前編輯推噓3(3011)
留言14則, 3人參與, 最新討論串6/7 (看更多)
※ 引述《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
就像之前有2+2=5的活動。
01/22 11:37, 2F

01/22 13:04, , 3F
你講的是String, 不過Object.hashCode()是native
01/22 13:04, 3F

01/22 13:05, , 4F
他的input可能是String 也可能是byte[] 但是廣義來講
01/22 13:05, 4F

01/22 13:05, , 5F
也有可能是任何東西(即使最後用的是Object.hashCode()
01/22 13:05, 5F

01/22 13:06, , 6F
依他給的 context 是 String
01/22 13:06, 6F

01/22 13:06, , 7F
不過基本上來講 native int Object.hashCode()在POJOs
01/22 13:06, 7F

01/22 13:06, , 8F
下 應該是要跨平台相等的
01/22 13:06, 8F

01/22 13:09, , 9F
@cyclone350 用固定演算法算出來不同就是 bug 了啊
01/22 13:09, 9F

01/22 14:06, , 10F
不過以他老闆對話來說 就算用md5來比String
01/22 14:06, 10F

01/22 14:06, , 11F
老闆還是會問「要是md5hash撞到了怎麼辦」 XD
01/22 14:06, 11F

01/22 14:07, , 12F
cyclone350要不要問問老闆 hashCode()改md5
01/22 14:07, 12F

01/22 14:07, , 13F
然後告訴我們老闆反應會是啥 XD
01/22 14:07, 13F

01/22 17:42, , 14F
http://bit.ly/1BgUoDq 可以跟老闆說婉君有算過機率xd
01/22 17:42, 14F
文章代碼(AID): #1Km5b3yC (java)
討論串 (同標題文章)
文章代碼(AID): #1Km5b3yC (java)