在JDK 5之后,Java類庫中才開始使用CAS操作,該操作由sun.misc.Unsafe類里面的compareAndSwapInt()和compareAndSwapLong()等幾個方法包裝提供。HotSpot虛擬機在內部對這些方法做了特殊處理,即時編譯出來的結果就是一條平台相關的處理器CAS指令,沒有方法調用的過程,或者可以認為是無條件內聯進去了[插圖]。不過由於Unsafe類在設計上就不是提供給用戶程序調用的類(Unsafe::getUnsafe()的代碼中限制了只有啟動類加載器(Bootstrap ClassLoader)加載的Class才能訪問它),因此在JDK 9之前只有Java類庫可以使用CAS,譬如J.U.C包里面的整數原子類,其中的compareAndSet()和getAndIncrement()等方法都使用了Unsafe類的CAS操作來實現。而如果用戶程序也有使用CAS操作的需求,那要么就采用反射手段突破Unsafe的訪問限制,要么就只能通過Java類庫API來間接使用它。直到JDK 9之后,Java類庫才在VarHandle類里開放了面向用戶程序使用的CAS操作。