91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java并發編程實例分析

發布時間:2020-10-08 09:37:15 來源:腳本之家 閱讀:144 作者:laozhang 欄目:編程語言

java并發編程是java程序設計語言的一塊重點,在大部分的業務場景中都需要并發編程。

比如:并發的去處理http請求,這樣就可以使得一臺機器同時處理多個請求,大大提高業務的響應效率,從而使用用戶體驗更加流暢。

java如何并發編程,要注意以下幾個方面:

1、java語言中的多線程操作:創建和啟動線程的幾種方式。

2、共享變量的同步問題,要保證線程安全,辨別哪些變量是線程安全的、那些變量是線程不安全的,對于不安全的變量我們要想辦法讓其同步,一般也就是加鎖。

3、線程鎖:包括方法鎖和synchronized塊的使用。

接下來就詳細說一下這幾個方面。

首先說創建線程的方式:一般有兩種方式

定義一個線程類:實現Runnable接口、或者繼承Thread,推薦是實現接口的方式。

java并發編程實例分析

java并發編程實例分析

啟動線程的方式:

第一種:new Thread()的方式。

創建好的線程,然后通過new的方式啟動線程,因為創建方式的不同,他們啟動的方式也略微有些差別。

第二種:通過線程池的方式啟動線程。JavaAPI提供了線程池技術,可以用池的原理,

去管理線程,池的技術在java中很常見,比如數據庫連接池等。

具體細節可以參考如下的連接:

java并發編程實例分析

共享變量的問題:要明白什么變量最有可能出現線程安全問題。沒錯就是靜態變量,靜態變量

相當于C語言的全局變量,如果是public類型,誰都可以修改,所以這個時候就會出現

變量的線程安全問題。當然了私有變量也可能出現線程安全問題。

具體細節可以參考如下的連接:

java并發編程實例分析

主要來說一下線程鎖的兩種方式:

(1)首先定義一個MyBusiness類,此類中頂一個一個靜態變量i,和一個靜態方法,靜態方法的功能是讓i加1。

java并發編程實例分析

(2)然后定義一個線程類MyThread2,run方法中先讓線程sleep 2毫秒,然后執行加1操作。

java并發編程實例分析

(3)定義測試類,測試類創建6000個MyThread2線程,然后sleep 1秒鐘,執行輸出,顯示i的值。

java并發編程實例分析

(4)結果:從結果可以看出,此時出現了線程安全問題,就是說某些線程在加1操作時取到了臟數據,即

在某一個時間點,多個線程同時取到了某個相同的i值,然后去修改,結果導致在這幾個線程中,只有最后一個

修改生效,而其他的則被覆蓋掉了。

java并發編程實例分析

(5)解決方案一:方法鎖,給add方法加鎖,表示同一時間只能有一個方法的調用被允許運行,其他的線程等待鎖的釋放。

再次運行,發現變成了6000就是正確的了。

java并發編程實例分析

java并發編程實例分析

(6)解決方案二:synchronized代碼塊,我們重新定義一個方法add1,然后用synchronized代碼塊鎖上MyBusiness類,

表示同一時間只能有一個線程操作MyBusiness類,其他線程必須等待鎖的釋放。

java并發編程實例分析

java并發編程實例分析

(7)查看結果,也得到了正確的輸出。

java并發編程實例分析

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

师宗县| 建昌县| 库尔勒市| 肥西县| 明水县| 长宁区| 澎湖县| 八宿县| 黑山县| 定边县| 望奎县| 毕节市| 铜陵市| 和平县| 巨鹿县| 勃利县| 德清县| 岑溪市| 康定县| 青铜峡市| 哈尔滨市| 苏尼特左旗| 湘潭市| 商河县| 绥宁县| 漳州市| 永和县| 香格里拉县| 托里县| 枣阳市| 运城市| 巫山县| 新郑市| 甘谷县| 崇义县| 玛纳斯县| 舟山市| 水城县| 乌鲁木齐县| 云浮市| 广河县|