我最近了解到sun.misc.Unsafe包,惊讶于它所能实现的功能。
当然,该类未被记录在文档中,但我想知道是否有使用它的充分理由。在哪些情况下可能需要使用它?在现实世界的场景中,它可能如何使用?
此外,如果您确实需要它,这是否不表示您的设计可能存在问题?
为什么Java甚至要包括这个类?
我最近了解到sun.misc.Unsafe包,惊讶于它所能实现的功能。
当然,该类未被记录在文档中,但我想知道是否有使用它的充分理由。在哪些情况下可能需要使用它?在现实世界的场景中,它可能如何使用?
此外,如果您确实需要它,这是否不表示您的设计可能存在问题?
为什么Java甚至要包括这个类?
使用Unsafe.park()
和Unsafe.unpark()
可以构建自定义并发控制结构和协作调度机制。
java.util.concurrent.locks.LockSupport
公开可用。 - bestsssputObjectVolatile
,并在其他线程进行稀有读取时使用readObjectVolatile
。该对象似乎能够在比Java代码通常允许的更低级别上工作。如果您正在编写高级应用程序,则JVM会将内存处理和其他操作抽象化,使编程更加容易。通过使用Unsafe库,您实际上正在完成通常为您完成的低级操作。
正如woliveirajr所述,“random()”使用Unsafe进行种子生成,就像许多其他操作将使用Unsafe中包含的allocateMemory()函数一样。
作为程序员,您可能永远不需要使用此库,但对低级元素进行严格控制确实很方便(这就是为什么主要产品中仍然存在汇编语言和(在较小程度上)C代码的原因)。