例項變數與執行緒安全

2021-09-14 00:06:27 字數 614 閱讀 4841

public

class

mythread

extends

thread

}

main方法跑一下

列印結果顯示,執行緒1,3,2列印的count的值都是3,產生了非執行緒安全問題。

當thread-1執行count – 時,分幾步完成:

1 把count的值從主存中複製乙份到快取記憶體中;

2 對count進行-1操作;

3 將count減去1之後的結果重新整理到主存中。

所以出現這樣的結果就不難理解了,當count為4時,thread-1在快取記憶體中對count進行-1操作,但是此時並沒有把count重新整理到主存;而thread-3從主存中拿到了count=4的值,所以產生了thread-1和thread-3的count都為3的情況,thread-2同理。

解決辦法就是在run方法加synchronized關鍵字,同一時刻只有乙個執行緒進入該方法。

多執行緒 例項變數與執行緒安全

自定義執行緒類中的例項變數針對其他執行緒有共享和不共享之分,這在多個執行緒之間進行互動時是乙個很重要的技術點。不共享資料的情況 下面通過乙個示例來看下資料不共享的情況。package com.vhqimk.thread 測試資料不共享的情況 public class test class mythr...

2 1 2例項變數非執行緒安全

package cha02.execise02 created by sunyifeng on 17 9 20.public class hasselfprivatenum else system.out println username num num catch interruptedexcep...

使用執行緒安全的單個例項變數

importorg.slf4j.logger importorg.slf4j.logge ctory created by csj on 2017 3 24.非執行緒安全存在於例項變數,方法內部的私有變數不存在非執行緒安全問題,永遠都是執行緒安全的,這都是方法內部的變數是私有的特性造成的。如果多個執...