更新時間:2024-03-12 來源:黑馬程序員 瀏覽量:
volatile是一個關(guān)鍵字,用于聲明一個變量可能會在程序的外部被修改,因此編譯器不應(yīng)該對這個變量的訪問進行優(yōu)化。volatile的主要作用是告訴編譯器不要對該變量進行優(yōu)化,以確保在多線程或者多任務(wù)環(huán)境下,變量的讀取和寫入是可見的,并且不會被編譯器的優(yōu)化所影響。
volatile關(guān)鍵字提供以下保證:
1.禁止編譯器對變量進行優(yōu)化,確保每次訪問都會從內(nèi)存中讀取或?qū)懭搿?/p>
2.保證多線程環(huán)境下對變量的讀寫操作是可見的,即一個線程對變量的修改能夠立即被其他線程看到。
下面是一個簡單的示例,演示了volatile變量的使用:
public class VolatileExample { private volatile boolean flag = false; public void toggleFlag() { flag = !flag; } public void printFlag() { System.out.println("Flag value: " + flag); } public static void main(String[] args) { VolatileExample example = new VolatileExample(); // Thread to continuously toggle the flag Thread toggleThread = new Thread(() -> { while (true) { example.toggleFlag(); try { Thread.sleep(1000); // Sleep for 1 second } catch (InterruptedException e) { e.printStackTrace(); } } }); // Thread to continuously print the flag value Thread printThread = new Thread(() -> { while (true) { example.printFlag(); try { Thread.sleep(2000); // Sleep for 2 seconds } catch (InterruptedException e) { e.printStackTrace(); } } }); toggleThread.start(); printThread.start(); } }
在這個示例中,flag變量被聲明為volatile,這樣可以確保在printThread線程中讀取flag變量時,能夠立即看到toggleThread線程對flag變量的修改。這樣就能保證printFlag()方法中打印的flag值是及時更新的。
【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19【AI大模型開發(fā)-Python】畢業(yè)33個工作日,就業(yè)率已達到94.55%,班均薪資20763元
2025-09-19【AI智能應(yīng)用開發(fā)-Java】畢業(yè)5個工作日就業(yè)率98.18%,最高薪資 17.5k*13薪,全班平均薪資9244元
2025-09-19