亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Java并發怎么理解

發布時間:2021-12-22 15:17:11 來源:億速云 閱讀:147 作者:iii 欄目:編程語言

本篇內容介紹了“Java并發怎么理解”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

什么是并發?用戶通常認為計算機在同一時刻可以做多個事情是理所當然的事情。

例1:例如你可以一邊聽音樂,一邊玩游戲,同時還通過聊天工具和別人聊天。假設你使用的qq音樂播放器在聽音樂,玩的是qq斗地主游戲,使用qq和別聊天,那么這實際上是三個不同的軟件在同時運行,完成三個不同的事情。

例2:當然我們也不能否認,在一個軟件內,同時可以完成以上三個事情:聊天、游戲和音樂。例如你在玩qq斗地主,以便在打pai,播放了背景音樂,同時你還可以和其他牌友聊天,發一句"我等的花兒也謝了",這實際上是一個軟件可以同時完成三個不同的事情。

  不管是那種情況,我們應該知道的是,并發指的是在同一時刻執行多個任務。  

java并發基礎

線程本身有很多優勢,比如可以發揮多處理器的強大能力、建模更加簡單、簡化異步事件的處理、是用戶界面的相應更加靈敏,但是更多的我們面對的是安全性問題,例如:

public class Concurrence{

    private int value;

    /*返回一個唯一的數值*/

    public int getValue(){

        return value++;

    }

}

Concurrence的問題在于,如果執行時機不對,那么兩個線程在調用getValue時會得到相同的值,錯誤示范:

雖然遞增運算value ++ 看上去是單操作,但是它包含了三個獨立的操作: 讀取Value、value + 1 、計算結果寫入Value。由于運行,可能將多個線程之間的操作交替執行,因此這兩個線程可能同事執行讀取操作,從而使它們得到相同的值,并都將這個值加1。結果就是,在不同線程的調用中返回了相同的值。

在Concurrence中說明的是一種常見的并發安全問題,稱為競態條件。當某個計算的正確性取決于多個線程的交替執行時序時,那么就會發生競態條件。

Java并發性和多線程介紹

在過去單CPU時代,單任務在一個時間點只能執行單一程序。之后發展到多任務階段,計算機能在同一時間點并行執行多任務或多進程。雖然并不是真正意義上的“同一時間點”,而是多個任務或進程共享一個CPU,并交由操作系統來完成多任務間對CPU的運行切換,以使得每個任務都有機會獲得一定的時間片運行。

隨著多任務對軟件開發者帶來的新挑戰,程序不在能假設獨占所有的CPU時間、所有的內存和其他計算機資源。一個好的程序榜樣是在其不再使用這些資源時對其進行釋放,以使得其他程序能有機會使用這些資源。

再后來發展到多線程技術,使得在一個程序內部能擁有多個線程并行執行。一個線程的執行可以被認為是一個CPU在執行該程序。當一個程序運行在多線程下,就好像有多個CPU在同時執行該程序。

多線程比多任務更加有挑戰。多線程是在同一個程序內部并行執行,因此會對相同的內存空間進行并發讀寫操作。這可能是在單線程程序中從來不會遇到的問題。其中的一些錯誤也未必會在單CPU機器上出現,因為兩個線程從來不會得到真正的并行執行。然而,更現代的計算機伴隨著多核CPU的出現,也就意味著不同的線程能被不同的CPU核得到真正意義的并行執行。

如果一個線程在讀一個內存時,另一個線程正向該內存進行寫操作,那進行讀操作的那個線程將獲得什么結果呢?是寫操作之前舊的值?還是寫操作成功之后的新值?或是一半新一半舊的值?或者,如果是兩個線程同時寫同一個內存,在操作完成后將會是什么結果呢?是第一個線程寫入的值?還是第二個線程寫入的值?還是兩個線程寫入的一個混合值?因此如沒有合適的預防措施,任何結果都是可能的。而且這種行為的發生甚至不能預測,所以結果也是不確定性的。

“Java并發怎么理解”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

龙南县| 雅江县| 怀柔区| 临邑县| 台东市| 陵川县| 锡林浩特市| 秭归县| 临清市| 张家口市| 吉木乃县| 鲜城| 台北县| 云南省| 长宁区| 阿勒泰市| 南丹县| 林甸县| 隆子县| 大同县| 万山特区| 绥棱县| 扶风县| 都昌县| 双柏县| 天镇县| 中阳县| 濮阳市| 安乡县| 兴安县| 色达县| 南岸区| 富民县| 孝昌县| 龙江县| 灵石县| 麟游县| 老河口市| 霍山县| 达拉特旗| 门源|