【多線程】三、線程訪問變量

相關文章:
【多線程】一、線程狀態切換
【多線程】二、線程優先級&守護線程
【多線程】三、線程訪問變量
【多線程】四、線程異常抓捕
【多線程】五、線程池
【多線程】六、鎖與同步
【多線程】七、阻塞隊列
【多線程】八、異步計算結果獲取
【多線程】九、Android異步任務

原子性保障
Java內存模型只保證基本數據類型的讀取常量賦值是原子操作;

volatile修飾符
建立一個內存柵欄,指令重排序不可通過有volatile變量的語句;
volatile變量在寫入操作後立即刷新主緩存並標記其他緩存無效;

final修飾符
final變量只有初始化指令完成以後纔對線程可見並且不可修改,以保證數據正確性;

原子包
java.util.concurrent.atomic包通過高級機器指令保證可見性原子性;
J.U.C原子包的CAS分析具體可參見: https://blog.csdn.net/Fantastic_/article/details/86658468

ThreadLocal<T>
每個線程中該變量是獨享的,不同線程互不干擾;
ThreadLocal原理

  • Key是虛引用ThreadLocal,該對象銷燬後JVM會在get()set()remove()時清理Null Key;
    但仍可能造成內存泄露;
ThreadLocal<SimpleDateFormat> format = ThreadLocal
    .withInitial(()->new SimpleDateFormat("yyyy-MM-dd"));

// 第一次使用會初始化並保存在ThreadLocalMap中
// 之後使用本線程不再初始化,直到線程被銷燬
format.get();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章