java volatile修饰引用_关于volatile修饰引用类型的疑惑
volatile修飾引用類型能否保證可見性似乎一直沒有一個定論,有的書中說僅能保證引用本身的可見性,下面用兩段代碼來驗證:流程基本為一個線程死循環(huán)讀取某個引用類型的某個變量的值,另一個線程修改這個值,觀察線程是否結(jié)束。
//volatile修飾類
public class TestVolatile implements Runnable{
class Foo {
boolean flag = true;
}
private volatile Foo foo = new Foo(); //
public void stop(){
foo.flag = false;
}
@Override
public void run() {
while (foo.flag){}
}
public static void main(String[] args) throws InterruptedException {
TestVolatile test = new TestVolatile();
Thread t = new Thread(test);
t.start();
Thread.sleep(1000);
test.stop();
}
}
//volatile修飾數(shù)組
public class TestVolatile2 implements Runnable{
private int len = 1024*1024;
volatile int[] arr = new int[len]; //
{
arr[len-1] = 1;
}
public void stop(){
arr[len-1] = 0;
}
@Override
public void run() {
while (arr[len-1] == 1){}
}
public static void main(String[] args) throws InterruptedException {
TestVolatile2 test = new TestVolatile2();
Thread t = new Thread(test);
t.start();
Thread.sleep(1000);
test.stop();
}
}
上面兩段代碼在有volatile字段的時候可觀察到程序停止運行,沒有volatile字段的時候會一直運行下去。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java volatile修饰引用_关于volatile修饰引用类型的疑惑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习之路 | PTA(天梯赛)——
- 下一篇: webapp入门到实战_web前端入门到