當(dāng)程序更新一個(gè)變量時(shí)活烙,如果多線程同時(shí)更新這個(gè)變量徐裸,可能得到期望之外的值,比如變量i=1啸盏,A線程更新i+1重贺,B線程也更新i+1,經(jīng)過(guò)兩個(gè)線程操作之后可能i不等于3,而是等于2檬姥。因?yàn)锳和B線程在更新變量i的時(shí)候拿到的i都是1,這就是線程不安全的更新操作粉怕,通常我們會(huì)使用synchronized來(lái)解決這個(gè)問(wèn)題健民,synchronized會(huì)保證多線程不會(huì)同時(shí)更新變量i。
而Java從JDK 1.5開(kāi)始提供了java.util.concurrent.atomic包(以下簡(jiǎn)稱Atomic包)贫贝,這個(gè)包中的原子操作類提供了一種用法簡(jiǎn)單秉犹、性能高效、線程安全地更新一個(gè)變量的方式稚晚。
因?yàn)樽兞康念愋陀泻芏喾N崇堵,所以在Atomic包里一共提供了13個(gè)類,屬于4種類型的原子更新方式客燕,分別是:
- 原子更新基本類型
- 原子更新數(shù)組
- 原子更新引用類型
- 原子更新字段類
詳情看文檔鸳劳。