日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java并发数据共享机制_Java并发编程:核心理论之数据共享性

發布時間:2023/12/1 java 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java并发数据共享机制_Java并发编程:核心理论之数据共享性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:Java并發編程:核心理論之數據共享性

并發編程是Java程序員最重要的技能之一,也是最難掌握的一種技能。它要求編程者對計算機最底層的運作原理有深刻的理解,同時要求編程者邏輯清晰、思維縝密,這樣才能寫出高效、安全、可靠的多線程并發程序。本系列會從線程間協調的方式(wait、notify、notifyAll)Synchronized及Volatile的本質入手,詳細解釋JDK為我們提供的每種并發工具和底層實現機制。在此基礎上,我們會進一步分析java.util.concurrent包的工具類,包括其使用方式、實現源碼及其背后的原理。本文是該系列的第一篇文章,是這系列中最核心的理論部分,之后的文章都會以此為基礎來分析和解釋。

一、共享性

數據共享性是線程安全的主要原因之一。如果所有的數據只是在線程內有效,那就不存在線程安全性問題,這也是我們在編程的時候經常不需要考慮線程安全的主要原因之一。但是,在多線程編程中,數據共享是不可避免的。最典型的場景是數據庫中的數據,為了保證數據的一致性,我們通常需要共享同一個數據庫中數據,即使是在主從的情況下,訪問的也同一份數據,主從只是為了訪問的效率和數據安全,而對同一份數據做的副本。我們現在,通過一個簡單的示例來演示多線程下共享數據導致的問題:

代碼段一:

package com.paddx.test.concurrent;

public class ShareData {

public static int count = 0;

public static void main(String[] args) {

final ShareData data = new ShareData();

for (int i = 0; i < 10; i++) {

new Thread(new Runnable() {

@Override

public void run() {

try {

//進入的時候暫停1毫秒,增加并發問題出現的幾率

Thread.sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

for (int j = 0; j < 100; j++) {

data.addCount();

}

System.out.print(count + " ");

}

}).start();

}

try {

//主程序暫停3秒,以保證上面的程序執行完成

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("count=" + count);

}

public void addCount() {

count++;

}

}

上述代碼的目的是對count進行加一操作,執行1000次,不過這里是通過10個線程來實現的,每個線程執行100次,正常情況下,應該輸出1000.不過,如果你運行上面的程序,你會發現結果卻不是這樣。下面是某次的執行結果(每次運行的結果不一定相同,有時候也可能獲取到正確的結果):

可以看出,對共享變量操作,在多線程環境下很容易出現各種意想不到的的結果。

來源:http://www.cnblogs.com/paddix/p/5374810.html

責任編輯:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java并发数据共享机制_Java并发编程:核心理论之数据共享性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。