Java 8에는 SplittableRandom
이라는 난수 생성기가 추가되어 스트림과 함께 사용되는 것으로 보입니다. 그러나 그것이 ThreadLocalRandom
보다 낫거나 더 유용하다는 것이 명확하지 않습니다. 읽는 문서에서 알고리즘이 더 나은 통계적 특성을 갖도록 변경된 것 같습니다. 즉, BetterThreadLocalRandom
이라고 부르지 않고 split 메소드를 드롭하지 않는 이유는 무엇입니까? 누구도 split()
번으로 전화를 걸 수 있습니까?SplittableRandom의 요점은 무엇입니까?
답변
SplittableRandom
의 유용성은 결정 론적 난수 생성기에서 비롯됩니다. 스트림의 경우 다른 스레드가 서로 다른 ThreadLocalRandom
값을 사용하여 매번 다른 계산을 할 수 있습니다. Doug Lea 전달이 언급 클래스를 도입하면서 :
"는 ThreadLocalRandom 옵션이 많은 목적을 위해 큰 동안, 당신은 말에서 고품질의 몬테카를로 시뮬레이션을 사용하고 싶지 않아요."
시뮬레이션에 흥미로운 결과가 있으며 특정 난수 시퀀스에 따라 달라지는 경우 SplittableRandom
추가 분석을 위해 반복 해 봅시다.
서로 다른 상황에서 사용하기 위해 서로 다른 두 가지를 비교하고 있습니다. 하나는 어느 정도까지 다른 하나의 역할을 수행 할 수 있습니다.
ThreadLocalRandom
로컬 스레드에 대한 다른 랜덤 발생기의 단지 인스턴스하는 SplittableRandom
가 발생하고 재귀 분할 SplittableRandom
새를 제공 할 수 있기 때문에 발전기에도 발생한다.
그러나 SplittableRandom
은 기능적 환경에서 스트림과 협조 할 수있는 기능을 제공하기 때문에 스레드와 관련이 없습니다.
임의의 데이터를 제공하는 것은 스레드에 무관심해야하며 스트림에서 parallel()
을 사용하는 경우에도 스레드에 종속적이어야합니다. 나는 스트림을 처리하고있는 람다 내부에서 자신이 ThreadLocalRandom.current()
을하고있는 것을보고 싶지 않습니까? 또한
여러 항목에 동일한 ThreadLocalRandom을 사용 병렬 스트림을 처리 할 스레드를 깨우기/수면의 고정 사이즈의 풀을 사용하는 구현이 가능한 평행 경로에 결합되는 SplittableRandom
일어날 수없는 특정 스레드로가 아니라 처리해야합니다.
예 스트림에서 ThreadLocalRandom을 사용하겠습니까? 물론 인스턴스 자체를 지나치지는 않을 것입니다.하지만 그 호출을 만드는 데 문제가있는 이유는 무엇입니까? –
@CarlMastrangelo : 특정 항목에 대한 스트림에서 사용되는 람다를 실행하는 스레드를 알지 못하기 때문에 스레드가 하나뿐이라면 무엇이 있을까요? 고정 된 양의 스레드를 가지고 있다면 어떨까요? 'SplittableRandom'은 무한한 임의의 스폰 메커니즘을 제공합니다. 이것은 기능적인 환경에서 기대할 수있는 것입니다. – Jack
왜 스레드의 수가 중요합니까? 스레드가 하나만 있으면 TLR.current(). next() 호출은 예측할 수없는 숫자를 반환합니다. SplittableRandom이 제공 할 수있는 것은 무엇입니까?나는 TLR을 사용하는 코드가 올바르지 않을 것이라고 생각했다. –
'BetterThreadLocalRandom' lol –
'ThreadLocalRandom'의 드롭 인 대체물이 아니며'BetterThreadLocalRandom'과 같은 것을 호출하는 것은 잘못된 것입니다. 스레드 로컬이 아닙니다. – user2357112
나는 더 나은 클래스를 가지고 있고 그것을'TheBestEverThreadLocalRandom'이라고 부르고있다. –