Szukam użyć (zaszczepione) Random
obiektów w wielu wątków, a javadocs wskazał mi ThreadLocalRandom
, który wygląda świetnie, z wyjątkiem nie mogę ustawić materiału siewnego, więc nie mogę zapewnić spójności między różnymi wątkami lub uruchomień. Czy istnieje jakiś praktyczny powód, aby korzystać ThreadLocalRandom
lub byłoby dopuszczalne zrobić coś jak następuje:Czy preferuję ThreadLocalRandom nad ThreadLocal <Random>?
// Pass returned ThreadLocal object to all threads which need it
public static ThreadLocal<Random> threadRandom(final long seed) {
return new ThreadLocal<Random>(){
@Override
protected Random initialValue() {
return new Random(seed);
}
};
}
Czy chcesz udostępnić jedną przypadkową instancję między różnymi wątkami? Lub upewnij się, że każdy wątek ma własną instancję Random? –
Zgodnie z dokumentacją dla 'losowego' dzielenia jeden obiekt' losowy' między wątkami jest kiepskim pomysłem. Po prostu chcę kontrolować nasienie losowych obiektów, które są używane, więc zachowanie jest spójne i powtarzalne. – dimo414
Można wstrzyknąć ziarno z odbiciem (zestaw zainicjalizowany na wartość false, wywołanie setSeed i zestaw z powrotem ustawiony na true). – assylias