Mar 18, 2012

Random / Math.random() / ThreadLocalRandom

java.util.Random

java.util.Random 亂數演算法會依賴 seed 數值產生亂數,並在產生亂數後重新產生 seed,
在 Multi-thread 下為了保證在各Thread取到不同的亂數, java.util.Random 在實作上使用 optimistic locking 來同步更換 seed ,問題是若所有Thread都使用同個Random物件產生亂數,在大量競爭下會造成不斷的loop計算,進而產生效能問題