作者qrtt1 (有些事,有时候。。。)
看板java
标题Re: [问题] 两个 Thread 疑问
时间Thu Jan 22 09:58:24 2015
※ 引述《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://webptt.com/cn.aspx?n=bbs/java/M.1421891907.A.F0C.html
※ 编辑: qrtt1 (220.130.128.164), 01/22/2015 10:00:21
1F:推 cyclone350: 是前者,不过我想不管如何,都没人可以保证任何事, 01/22 11:37
2F:→ cyclone350: 就像之前有2+2=5的活动。 01/22 11:37
3F:推 Killercat: 你讲的是String, 不过Object.hashCode()是native 01/22 13:04
4F:→ Killercat: 他的input可能是String 也可能是byte[] 但是广义来讲 01/22 13:05
5F:→ Killercat: 也有可能是任何东西(即使最後用的是Object.hashCode() 01/22 13:05
6F:→ qrtt1: 依他给的 context 是 String 01/22 13:06
7F:→ Killercat: 不过基本上来讲 native int Object.hashCode()在POJOs 01/22 13:06
8F:→ Killercat: 下 应该是要跨平台相等的 01/22 13:06
9F:→ qrtt1: @cyclone350 用固定演算法算出来不同就是 bug 了啊 01/22 13:09
10F:推 Killercat: 不过以他老板对话来说 就算用md5来比String 01/22 14:06
11F:→ Killercat: 老板还是会问「要是md5hash撞到了怎麽办」 XD 01/22 14:06
12F:→ Killercat: cyclone350要不要问问老板 hashCode()改md5 01/22 14:07
13F:→ Killercat: 然後告诉我们老板反应会是啥 XD 01/22 14:07