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.非執行緒安全存在於例項變數,方法內部的私有變數不存在非執行緒安全問題,永遠都是執行緒安全的,這都是方法內部的變數是私有的特性造成的。如果多個執...