Từ khóa Volatile - Concurrency - Deft Blog
Từ khóa volatile trong java được sử dụng để đánh dấu một biến sẽ được lưu trữ trong main memory. Nghĩa là mọi lệnh đọc giá trị các biến volatile đều đọc từ main menory chứ không phải đọc từ CPU cache, việc ghi giá trị cho các biến volatile cũng tương tự sẽ ghi xuống main memory. Trong ứng dụng đa luồng(multithread) khi mỗi luồng(thread) làm việc với các biến non-volatile(không có chứa từ khóa volatile) mỗi thread có thể sao chép chúng từ main memory vào CPU cache để thao tác giúp tăng performance. Nếu máy tính của bạn có nhiều CPU thì có thể mỗi thread sẽ chạy trên một CPU khác nhau đồng nghĩa với việc mỗi thread sẽ sao chép các biến vào CPU cache riêng của chúng. Với các biến non-volatile thì chúng ta sẽ không đảm bảo rằng khi bào JVM đọc dữ liệu từ main memory vào cpu cache và ghi dữ liệu từ CPU cache vào main memory. Chính vì thế giá trị của biến non-volatile có thể khác nhau ở từng thread và giá trị của chúng ở main memory cũng ko đảm bảo tính đồng nhất. Ví dụ chúng ta có 2 thread
Home Java Từ khóa Volatile – Concurrency Tags: Java Core Mục lục 1 Tại sao cần sử dụng Volatile 2 Cách sử dụng Volatile 2.1 Flow hoạt động của volatile 3 Hạn chế của volatile 4 Khi nào sử dụng volatile Từ khóa volatile trong java được sử dụng để đánh dấu một biến sẽ được lưu trữ trong main memory. Nghĩa là mọi lệnh đọc giá trị các biến volatile đều đọc từ main menory chứ không phải đọc từ CPU cache, việc ghi giá trị cho các biến volatile cũng tương tự sẽ ghi xuống main memory. Tại sao cần sử dụng Volatile Trong ứng dụng đa luồng(multithread) khi mỗi luồng(thread) làm việc với các biến no
Explore this link on the map →related reading
- Atomic Access (The Java™ Tutorials > Essential Java Classes > Concurrency)docs.oracle.com
- To Thread or Not to Thread: An In-Depth Look at Ruby’s Execution Models - Shopifyshopify.engineering
- BrrrVizbrrrviz.com
- Reading 16: Mutual Exclusionweb.mit.edu
- Reading 14: Concurrencyweb.mit.edu
- Low Latency Java with the Disruptorblog.scottlogic.com
- research!rsc: Hardware Memory Models (Memory Models, Part 1)research.swtch.com
- The Go Memory Model - The Go Programming Languagego.dev
- Redis 多线程的学习和理解 - lxkakalxkaka.wang
- Who ordered memory fences on an x86? | Bartosz Milewski's Programming Cafebartoszmilewski.com
- Multiversion concurrency control - Wikipediaen.wikipedia.org
- C++11 Memory Modelpeople.cs.pitt.edu