當前位置:
首頁 >
多个线程直接按对数据进行操作容易引发线程安全问题
發布時間:2025/3/18
25
豆豆
生活随笔
收集整理的這篇文章主要介紹了
多个线程直接按对数据进行操作容易引发线程安全问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考鏈接:http://www.cnblogs.com/paddix/p/5374810.html
代碼:
public class Count {public int num;public void add(){for(int i =0;i < 10;i++){num++;}System.out.println(Thread.currentThread().getName()+"-" +num);}} public class MyThreadTest {public static void main(String[] args){Count count = new Count();for(int i =0;i<10;i++){new Thread(new Runnable() {@Overridepublic void run() {try {/增加線程的并發性Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}count.add();}}).start();}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(count.num);} }
結果展示:
Thread-9-80 Thread-7-90 Thread-4-70 Thread-5-70 Thread-2-70 Thread-0-80 Thread-1-70 Thread-6-80 Thread-3-70 Thread-8-70 90以上的代碼原本應該等于100,但由于存在線程的問題,10個線程同時共享同一個變量,這樣就容易產生線程安全問題。
原因:線程直接不能直接傳遞數據,他們之間的交互是通過共享數據來實現。如上述的代碼中,10個線程共用一個count對象,這個count對象是在主內存中,每個線程都有自己的線程棧,都是從主存中讀取count對象的值并復制過來,然后執行完add()方法后,再刷新到主存中,這樣就很容易造成線程安全。
?
轉載于:https://www.cnblogs.com/lfdingye/p/7355630.html
總結
以上是生活随笔為你收集整理的多个线程直接按对数据进行操作容易引发线程安全问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1355: [Baltic2009]Ra
- 下一篇: 第3章 简单爬虫架构