002 並發的基本概念
阿新 • • 發佈:2018-04-30
問題 虛擬機 切換 自己的 col java 基礎 數據共享 nbsp
一 . 概述
並發:
在單核處理器之中,我們的線程是在CPU之中不斷地切換完成任務,這是單核處理器之中的並發.
在多核處理器之中,我們的線程是運行的不同的CPU核之中,也就是說,我們的程序是在並行進行的.
介紹上面的概念的目的就是說,我們的並發需要從硬件的基礎之上來說明,因為JVM完成了指令的重寫和優化,我們如果不知道有優化和重寫的概念,
根本就不知道並發之中可能會出現問題的地方.
二 .指令重寫
CPU為了自己的快速運行,會對代碼的運行順序進行調整,也就是說程序的運行並非是按照順序執行的.
在單核時代,CPU需要保證最終的結果是一致性的.
但是在多核下,CPU也無法保證這種結果的一致性.因此在並發的情況下,結果出錯的風險會變得更大.
三 java的努力
java為了保證一致性,在虛擬機的層面上提供了一致性的結果,做出了JVM的規範.
在這種規範之下,屏蔽了特有系統和硬件的特性問題,按照一致性的處理方式來處理並發.
雖然效率不如使用特有命令效率高,但是能保證結果的正確性有保證.
java之中的線程是獨立運行的一個實體,所需要的數據共享變量是從主內存中拷貝出來的一個副本.
當在多線程環境下,每個線程都會有自己的變量副本.
但是各個線程並不知道其它線程也在操作這個變量副本----------可見性問題.
解決的方式就是同步.
002 並發的基本概念