java中volatile不能保證線程安全(實(shí)例講解)
今天打了打代碼研究了一下java的volatile關(guān)鍵字到底能不能保證線程安全,經(jīng)過實(shí)踐,volatile是不能保證線程安全的,它只是保證了數(shù)據(jù)的可見性,不會再緩存,每個(gè)線程都是從主存中讀到的數(shù)據(jù),而不是從緩存中讀取的數(shù)據(jù),附上代碼如下,當(dāng)synchronized去掉的時(shí)候,每個(gè)線程的結(jié)果是亂的,加上的時(shí)候結(jié)果才是正確的。
/**
*
* 類簡要描述
*
* <p>
* 類詳細(xì)描述
* </p>
*
* @author think
*
*/
public class VolatileThread implements Runnable {
private volatile int a = 0;
@Override
public void run() {
// TODO Auto-generated method stub
// synchronized (this) {
a = a + 1;
System.out.println(Thread.currentThread().getName() + ":----" + a);
try {
Thread.sleep(100);
a = a + 2;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":----" + a);
// }
}
}
/**
*
* 類簡要描述
*
* <p>
* 類詳細(xì)描述
* </p>
*
* @author think
*
*/
public class VolatileMain {
public static void main(String[] args) {
VolatileThread s = new VolatileThread();
Thread t1 = new Thread(s);
Thread t2 = new Thread(s);
Thread t3 = new Thread(s);
Thread t4 = new Thread(s);
t1.start();
t2.start();
t3.start();
t4.start();
/* 同步的結(jié)果
Thread-2:----1
Thread-2:----3
Thread-0:----4
Thread-0:----6
Thread-3:----7
Thread-3:----9
Thread-1:----10
Thread-1:----12*/
/*
去掉同步的結(jié)果
Thread-0:----1
Thread-1:----2
Thread-2:----3
Thread-3:----4
Thread-0:----8
Thread-3:----10
Thread-1:----10
Thread-2:----12*/
}
}
以上這篇java中volatile不能保證線程安全(實(shí)例講解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)excel和txt文件互轉(zhuǎn)
本篇文章主要介紹了java實(shí)現(xiàn)excel和txt文件互轉(zhuǎn)的相關(guān)知識。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04
mybatis中${}和#{}的區(qū)別以及底層原理分析
這篇文章主要介紹了mybatis中${}和#{}的區(qū)別以及底層原理,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
在SpringBoot中整合使用Netty框架的詳細(xì)教程
這篇文章主要介紹了在SpringBoot中整合使用Netty框架的教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
SpringBoot使用freemarker導(dǎo)出word文件方法詳解
這篇文章主要介紹了SpringBoot使用freemarker導(dǎo)出word文件方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-11-11
mybatis-plus配置控制臺打印完整帶參數(shù)SQL語句的實(shí)現(xiàn)
這篇文章主要介紹了mybatis-plus配置控制臺打印完整帶參數(shù)SQL語句,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Spring Bean的包掃描的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring Bean的包掃描的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
springboot static關(guān)鍵字真能提高Bean的優(yōu)先級(厲害了)
這篇文章主要介紹了springboot static關(guān)鍵字真能提高Bean的優(yōu)先級(厲害了),需要的朋友可以參考下2020-07-07

