2017-11-28 23 views
1

Java 8에는 SplittableRandom이라는 난수 생성기가 추가되어 스트림과 함께 사용되는 것으로 보입니다. 그러나 그것이 ThreadLocalRandom보다 낫거나 더 유용하다는 것이 명확하지 않습니다. 읽는 문서에서 알고리즘이 더 나은 통계적 특성을 갖도록 변경된 것 같습니다. 즉, BetterThreadLocalRandom이라고 부르지 않고 split 메소드를 드롭하지 않는 이유는 무엇입니까? 누구도 split() 번으로 전화를 걸 수 있습니까?SplittableRandom의 요점은 무엇입니까?

+0

'BetterThreadLocalRandom' lol –

+0

'ThreadLocalRandom'의 드롭 인 대체물이 아니며'BetterThreadLocalRandom'과 같은 것을 호출하는 것은 잘못된 것입니다. 스레드 로컬이 아닙니다. – user2357112

+0

나는 더 나은 클래스를 가지고 있고 그것을'TheBestEverThreadLocalRandom'이라고 부르고있다. –

답변

1

SplittableRandom의 유용성은 결정 론적 난수 생성기에서 비롯됩니다. 스트림의 경우 다른 스레드가 서로 다른 ThreadLocalRandom 값을 사용하여 매번 다른 계산을 할 수 있습니다. Doug Lea 전달이 언급 클래스를 도입하면서 :

"는 ThreadLocalRandom 옵션이 많은 목적을 위해 큰 동안, 당신은 말에서 고품질의 몬테카를로 시뮬레이션을 사용하고 싶지 않아요."

시뮬레이션에 흥미로운 결과가 있으며 특정 난수 시퀀스에 따라 달라지는 경우 SplittableRandom 추가 분석을 위해 반복 해 봅시다.

0

서로 다른 상황에서 사용하기 위해 서로 다른 두 가지를 비교하고 있습니다. 하나는 어느 정도까지 다른 하나의 역할을 수행 할 수 있습니다.

ThreadLocalRandom 로컬 스레드에 대한 다른 랜덤 발생기의 단지 인스턴스하는 SplittableRandom가 발생하고 재귀 분할 SplittableRandom 새를 제공 할 수 있기 때문에 발전기에도 발생한다.

그러나 SplittableRandom은 기능적 환경에서 스트림과 협조 할 수있는 기능을 제공하기 때문에 스레드와 관련이 없습니다.

임의의 데이터를 제공하는 것은 스레드에 무관심해야하며 스트림에서 parallel()을 사용하는 경우에도 스레드에 종속적이어야합니다. 나는 스트림을 처리하고있는 람다 내부에서 자신이 ThreadLocalRandom.current()을하고있는 것을보고 싶지 않습니까? 또한

여러 항목에 동일한 ThreadLocalRandom을 사용 병렬 스트림을 처리 할 스레드를 깨우기/수면의 고정 사이즈의 풀을 사용하는 구현이 가능한 평행 경로에 결합되는 SplittableRandom 일어날 수없는 특정 스레드로가 아니라 처리해야합니다.

+0

예 스트림에서 ThreadLocalRandom을 사용하겠습니까? 물론 인스턴스 자체를 지나치지는 않을 것입니다.하지만 그 호출을 만드는 데 문제가있는 이유는 무엇입니까? –

+0

@CarlMastrangelo : 특정 항목에 대한 스트림에서 사용되는 람다를 실행하는 스레드를 알지 못하기 때문에 스레드가 하나뿐이라면 무엇이 있을까요? 고정 된 양의 스레드를 가지고 있다면 어떨까요? 'SplittableRandom'은 무한한 임의의 스폰 메커니즘을 제공합니다. 이것은 기능적인 환경에서 기대할 수있는 것입니다. – Jack

+0

왜 스레드의 수가 중요합니까? 스레드가 하나만 있으면 TLR.current(). next() 호출은 예측할 수없는 숫자를 반환합니다. SplittableRandom이 제공 할 수있는 것은 무엇입니까?나는 TLR을 사용하는 코드가 올바르지 않을 것이라고 생각했다. –