由於併發程式要比序列程式複雜很多,其中乙個重要原因是併發程式中資料訪問的一致性和安全性將會受到嚴重挑戰。如何保證乙個執行緒可以看到正確的資料呢?這個問題看起來很白痴。對於序列程式來說,根本就是小菜一碟,如果你讀取乙個變數,這個變數的值是1,那麼你讀到的一定是1,就是這麼簡單的問題在並行程式中居然變得複雜起來。事實上,如果不加控制的任由執行緒胡亂並行,即使原本是1的資料,你也有可能讀到2。因此,我們需要在深入了解並行機制的前提下,在定義一種規則,保證多個多執行緒間可以有效地、正確地協同工作。而jmm也就是為此而生的。
jmm的關鍵技術點都是圍繞著多執行緒的原子性、可見性和有序性來建立的。因此,我們首先必須了解這些概念。
原子性是指乙個操作是不可中斷的。即使是在多個執行緒一起執行的時候,乙個操作一旦開始,就不會被其他執行緒干擾。
比如,對於乙個靜態全域性變數int i,兩個執行緒同時對它賦值,執行緒a給它賦值1,執行緒b給他賦值為-1,那麼不管這兩個執行緒以何總方式、何種步調工作,i的值要麼是1,要麼是-1。執行緒a和執行緒b之間是沒有干擾的。這就是原子性的乙個特點,不可被中斷。
但如果我們不使用int型資料而使用long型資料,可能就沒有那麼幸運了。對於32位系統來說,long型資料的讀寫不是原子性的(因為long型資料有64位)。也就是說,如果兩個執行緒同時對long型資料進行寫入(或者讀取),則對執行緒之間的結果是有干擾的。
多執行緒 多執行緒原理
我們首先要知道什麼是多執行緒,說白了就是多個執行緒,執行緒是什麼呢,其實就是程序執行的途徑,那麼說道這裡我們又引入了乙個新的名字,就是程序,那麼我們來看看什麼是程序,其實我們自己也能看到,啟動電腦的任務管理器,我們就可以看到程序選項,裡面是我們電腦所有的程序,我們會發現有很多的程序.簡單地說就是程序...
多執行緒(一) tomcat 多執行緒
web server允許的最大執行緒連線數還受制於作業系統的核心引數設定,通常windows是2000個左右,linux是1000個左右。1.編輯tomcat安裝目錄下的conf目錄下的server.xml檔案 maxthreads 150 表示最多同時處理150個連線,tomcat使用執行緒來處理...
多執行緒 理解多執行緒(一)
程序 程序是cpu分配資源的基本單位 執行緒 執行緒是cpu排程的基本單位 資源分配給程序,所有執行緒共享該程序的資源 當執行緒數大於cpu的數量,會出現時間片的輪詢。cpu時間片是直接分配給執行緒的,執行緒拿到cpu時間片就能執行了 cpu時間片不是先分給程序然後再由程序分給程序下的執行緒的。所有...