線程安全單例模式j(luò)ava Java線程安全問題指的是全局變量,還是靜態(tài)變量?
Java線程安全問題指的是全局變量,還是靜態(tài)變量?哈哈,當(dāng)你看到這個(gè)問題,你應(yīng)該有點(diǎn)白。全局變量和靜態(tài)變量都有線程安全問題,因?yàn)樗鼈冊诙褍?nèi)存中,由所有線程共享。如果您想了解線程,請先轉(zhuǎn)到JAVA內(nèi)存模
Java線程安全問題指的是全局變量,還是靜態(tài)變量?
哈哈,當(dāng)你看到這個(gè)問題,你應(yīng)該有點(diǎn)白。全局變量和靜態(tài)變量都有線程安全問題,因?yàn)樗鼈冊诙褍?nèi)存中,由所有線程共享。如果您想了解線程,請先轉(zhuǎn)到JAVA內(nèi)存模型。靜態(tài)變量:線程不安全。靜態(tài)變量,即類變量,位于方法區(qū)域中。它們被所有對象共享并共享一部分內(nèi)存。修改靜態(tài)變量后,其他對象對修改是可見的,因此線程是不安全的。
2. 實(shí)例變量:單例模式(只存在一個(gè)對象實(shí)例)是線程不安全和非單例線程安全的。實(shí)例變量是對象實(shí)例的私有變量,并在虛擬機(jī)堆中分配。如果這個(gè)對象在系統(tǒng)中只有一個(gè)實(shí)例,那么在多線程環(huán)境中,“就像”這個(gè)靜態(tài)變量,被一個(gè)線程修改后,其他線程都能看到修改,所以線程是不安全的。如果每個(gè)線程在不同的對象中執(zhí)行,那么對象和對象之間的實(shí)例變量是不安全的,修改不會相互影響,因此線程安全。
3. 局部變量:線程安全。當(dāng)每個(gè)線程執(zhí)行時(shí),它會將局部變量放在自己的堆棧幀的工作內(nèi)存中,這在線程之間是不共享的,因此不存在線程安全問題。