浅析Java各种变量线程安全问题
靜態(tài)方法
非靜態(tài)方法
靜態(tài)變量
實(shí)例變量
局部變量
靜態(tài)方法(Static Method)
與靜態(tài)成員變量一樣,屬于類本身,在類裝載的時(shí)候被裝載到內(nèi)存(Memory),不自動(dòng)進(jìn)行銷毀,會(huì)一直存在于內(nèi)存中,直到JVM關(guān)閉。
非靜態(tài)方法(Non-Static Method)
又叫實(shí)例化方法,屬于實(shí)例對(duì)象,實(shí)例化后才會(huì)分配內(nèi)存,必須通過類的實(shí)例來引用。不會(huì)常駐內(nèi)存,當(dāng)實(shí)例對(duì)象被JVM 回收之后,也跟著消失。
靜態(tài)變量:線程非安全。
變量即類變量,位于方法區(qū),為所有該類下的對(duì)象共享,共享一份內(nèi)存,一旦靜態(tài)變量被修改,其他對(duì)象均對(duì)修改可見,故線程非安全。
變量:單例模式(只有一個(gè)對(duì)象實(shí)例存在)線程非安全,非單例線程安全。
實(shí)例變量為對(duì)象實(shí)例私有,在虛擬機(jī)的堆中分配,若在系統(tǒng)中只存在一個(gè)此對(duì)象的實(shí)例,在多線程環(huán)境下,“猶如”靜態(tài)變量那樣,被某個(gè)線程修改后,其他線程對(duì)修改均可見,故線程非安全;如果每個(gè)線程執(zhí)行都是在不同的對(duì)象中,那對(duì)象與對(duì)象之間的實(shí)例變量的修改將互不影響,故線程安全。
局部變量:線程安全。
每個(gè)線程執(zhí)行時(shí)將會(huì)把局部變量放在各自棧幀的工作內(nèi)存中,線程間不共享,故不存在線程安全問題。
總結(jié)
以上是生活随笔為你收集整理的浅析Java各种变量线程安全问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解线程本地变量ThreadLocal
- 下一篇: 静态方法与单例模式的区别以及为什么要用单