RandomGenerator 的默认算法即。从 JDK 18(自 17 起可用)开始,L32X64MixRandom 每次在单独调用时都会生成相同的数字。
jshell> java.util.random.RandomGenerator.getDefault().nextInt(100,999)
$10 ==> 526
jshell> java.util.random.RandomGenerator.getDefault().nextInt(100,999)
$11 ==> 526
jshell> java.util.random.RandomGenerator.of("L32X64MixRandom").nextInt(100, 999)
$14 ==> 526
jshell> java.util.random.RandomGenerator.of("L32X64MixRandom").nextInt(100, 999)
$15 ==> 526
Run Code Online (Sandbox Code Playgroud)
javadoc 听起来也没有任何特别的警告:
返回在指定原点(包括)和指定边界(不包括)之间伪随机选择的 int 值。
实现要求:默认实现检查origin 和bound 是否为正整数。然后调用 nextInt(),将结果限制为大于或等于原点且小于界限。如果bound是2的幂,那么限制就是一个简单的掩码操作。否则,通过调用 nextInt() 重新计算结果,直到结果大于或等于 origin 且小于bound。
而其他算法(包括遗留算法)似乎具有可感知的随机性水平,例如。
jshell> java.util.random.RandomGenerator.of("Random").nextInt(100,999)
$7 ==> 451
jshell> java.util.random.RandomGenerator.of("Random").nextInt(100,999)
$8 ==> 633
jshell> java.util.random.RandomGenerator.of("L64X128MixRandom").nextInt(100, 999)
$12 ==> 570
jshell> java.util.random.RandomGenerator.of("L64X128MixRandom").nextInt(100, 999)
$13 ==> 844
Run Code Online (Sandbox Code Playgroud)
默认选择的这种程度的决定论是否有原因?
编辑:行为。流非常相似,初始值似乎总是相同的
jshell> java.util.random.RandomGenerator.getDefault().ints(100,999).limit(5).toArray()
$22 ==> int[5] { 526, 860, 258, 558, 820 }
jshell> …Run Code Online (Sandbox Code Playgroud) 我目前面临的是我们在Windows 2008服务器R2上的Citrix环境中运行的一些Eclipse应用程序中的异常访问冲突.
调用开始org.eclipse.swt.widgets.FileDialog.open(),调用方法org.eclipse.swt.internal.win32.OS.GetSaveFileNameW然后转到本机库.它失败,并# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x68931bab, pid=9208, tid=7616
与siginfo: ExceptionCode=0xc0000005, ExceptionInformation=0x00000008 0x68931bab
分析创建的minidump,我结束了 thumbcache.dll
thumbcache.dll!CThumbnailCache::CThumbnailCache(int) Unknown
thumbcache.dll!ThumbnailCacheCreateInstance(int,struct _GUID const &,void * *) Unknown
thumbcache.dll!CThumbCacheClassFactory::CreateInstance(struct IUnknown *,struct _GUID const &,void * *) Unknown
ole32.dll!CServerContextActivator::CreateInstance(IUnknown * pUnkOuter, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties) Line 1000 C++
ole32.dll!ActivationPropertiesIn::DelegateCreateInstance(IUnknown * pUnkOuter, IActivationPropertiesOut * * ppActPropsOut) Line 1917 C++
ole32.dll!CApartmentActivator::CreateInstance(IUnknown * pUnkOuter, IActivationPropertiesIn * pInActProperties, IActivationPropertiesOut * * ppOutActProperties) C++
ole32.dll!CProcessActivator::CCICallback(unsigned long dwContext, IUnknown * pUnkOuter, ActivationPropertiesIn …Run Code Online (Sandbox Code Playgroud)