欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基礎之并發(fā)相關知識總結

 更新時間:2021年05月26日 14:48:49   作者:vcjmhg  
隨著摩爾定律逐步失效,cpu單核性能達到瓶頸,并發(fā)逐漸逐漸得到廣泛應用,因而學習了解以及使用并發(fā)就顯得十分重要,但并發(fā)相關的知識比較瑣碎,不易系統(tǒng)學習,因而本篇文章參照王寶令老師《Java并發(fā)編程》來勾勒出一張“并發(fā)全景圖”,需要的朋友可以參考下

一、Java并發(fā)是什么?

用學術定義來說就是

并發(fā):同一時間段,多個任務都在執(zhí)行 (單位時間內不一定同時執(zhí)行);

簡單來說就是,同一個時間段,讓計算機同時做多個事情。

說到并發(fā),不得不提就是并行

并行:單位時間內,多個任務同時執(zhí)行。

兩者大眼一看很像,仔細一想?yún)s并不相同,因為并行強調某個時間點多個任務同時執(zhí)行,而并發(fā)強調的是一個時間段內多個任務都在執(zhí)行。

二、怎么做?

大部分并發(fā)問題,最終都可以抽象成三類問題分工、同步互斥。而且針對不同的問題有著不同的方式來解決,具體如下圖所示:

image.png

三、分工

所謂分工,類似于現(xiàn)實中一個組織完成一個項目,項目經(jīng)理要拆分任務,安排合適的成員去完成。

在并發(fā)編程領域,你就是項目經(jīng)理,線程就是項目組成員。任務分解和分工對于項目成敗非常關鍵,不過在并發(fā)領域里,分工更重要,它直接決定了并發(fā)程序的性能,并且分工非常重要且復雜,因而Java并發(fā)包中有一系列方法來實現(xiàn)分工

  • “Executor與線程池”
  • “ForkJoin”
  • “Future的使用”

基于分工思想設計的并發(fā)設計模式也有很多:

  • “Guarded Supension模式”
  • “Balking模式”
  • “Threa-Per-Message模式”
  • “生產(chǎn)者-消費者模式”
  • “Work Thread模式”
  • “兩階段終止模式”

四、同步

同步更多描述的是一種協(xié)同關系,在分完工之后,具體執(zhí)行時,任務之間會有依賴,一個任務之后完成之后,其他依賴它的任務才能開始進行,因而就引入的同步來協(xié)同各個任務之間的執(zhí)行順序。

針對該類問題,Java也提供了一系列工具來輔助解決:

  • “信號量(Semaphore)機制”
  • “管程(Monitor)”
  • “CountDownLatch”
  • “CyclicBarrier”
  • “Phaser”
  • “Exchanger”

五、互斥

分工、同步主要為了充分發(fā)掘CPU的性能來解決問題,但并發(fā)問題中,還需要解決正確性問題,即保證線程安全。

當多個線程同時訪同一個變量時,最后執(zhí)行的結果是不確定的,比如下邊這段代碼:

public class UnsafeSequence {
	private int value = 0;
	public int getNext() {
		return ++value;
	}
}

如果我們有多個線程同時調用getNext()時,多個線程之間推進順序的不同可能會有不同的執(zhí)行結果:

可能會是2,遞推順序如下:

image.png

可能結果是1,代碼執(zhí)行順序如下:

image.png

因而結果是不確定的,也就是說結果可能是正確的(比如上邊的程序執(zhí)行結果為2),可能是錯誤的(比如執(zhí)行結果是1),執(zhí)行前是不知道的。而導致不確定的主要源頭主要是三個問題可見性問題、有序性問題和原子性問題,為了解決這三個問題,Java引入了內存模型,內存模型提供一系列規(guī)則利用這些規(guī)則,我們可以避免可見性問題、有序性問題,但是還不足以完全解決線程安全問題。解決線程安全問題的核心方案還是互斥

所謂互斥,指的是同一時刻,只允許一個線程訪問共享變量。

實現(xiàn)互斥主要手段是互斥鎖主要包含下邊這些手段:

  • Synchronized
  • Lock
  • 讀寫鎖

除此之外,未來提高速度,也有一些無鎖的方案:

  • 不變模式
  • 線程本地存儲
  • CAS
  • Copy - on - Write
  • 原子類

六、總結

本文主要從分工、同步和互斥三類問題展開,從解決對應問題角度出發(fā)大致梳理了Java并發(fā)知識的學習前景圖。后續(xù)將分若干部分來講對應的內容。

到此這篇關于Java基礎之并發(fā)相關知識總結的文章就介紹到這了,更多相關Java并發(fā)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java基于面向對象實現(xiàn)一個戰(zhàn)士小游戲

    Java基于面向對象實現(xiàn)一個戰(zhàn)士小游戲

    這篇文章主要為大家詳細介紹了Java如何基于面向對象實現(xiàn)一個戰(zhàn)士小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-07-07
  • java多線程之并發(fā)工具類CountDownLatch,CyclicBarrier和Semaphore

    java多線程之并發(fā)工具類CountDownLatch,CyclicBarrier和Semaphore

    這篇文章主要為大家介紹了java并發(fā)工具類CountDownLatch,CyclicBarrier和Semaphore ,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 結合線程池實現(xiàn)apache?kafka消費者組的誤區(qū)及解決方法

    結合線程池實現(xiàn)apache?kafka消費者組的誤區(qū)及解決方法

    這篇文章主要介紹了結合線程池實現(xiàn)apache?kafka消費者組的誤區(qū)及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • java中?${}?和?#{}?有什么區(qū)別

    java中?${}?和?#{}?有什么區(qū)別

    本文主要介紹了java中${}和#{}有什么區(qū)別,${}和#{}都是MyBatis中用來替換參數(shù)的,它們都可以將用戶傳遞過來的參數(shù),替換到MyBatis最終生成的SQL中,但它們區(qū)別卻是很大的,感興趣的小伙伴可以一起來學習下面詳細內容
    2022-08-08
  • MyBatis多數(shù)據(jù)源的兩種配置方式

    MyBatis多數(shù)據(jù)源的兩種配置方式

    這篇文章主要給大家介紹了關于MyBatis多數(shù)據(jù)源的兩種配置方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • 在項目中直接使用hystrix的流程分析

    在項目中直接使用hystrix的流程分析

    最近由于一些背景原因,需要在項目中需要對接口進行限流。所以就考慮到了直接使用Hystrix,但是呢,又不想直接使用SpringCloud,而是直接引入原生,現(xiàn)在發(fā)現(xiàn)挺好用的,所以記錄下來,需要的朋友參考下吧
    2022-06-06
  • Springboot?整合maven插口調用maven?release?plugin實現(xiàn)一鍵打包功能

    Springboot?整合maven插口調用maven?release?plugin實現(xiàn)一鍵打包功能

    這篇文章主要介紹了Springboot?整合maven插口調用maven?release?plugin實現(xiàn)一鍵打包功能,整合maven-invoker使程序去執(zhí)行mvn命令,結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • Spring Boot啟動過程完全解析(二)

    Spring Boot啟動過程完全解析(二)

    這篇文章主要介紹了Spring Boot啟動過程完全解析(二),需要的朋友可以參考下
    2017-04-04
  • Java中String、StringBuffer和StringBuilder的區(qū)別

    Java中String、StringBuffer和StringBuilder的區(qū)別

    這篇文章主要介紹了Java中String、StringBuffer和StringBuilder的區(qū)別,StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串char[]value但是沒有final關鍵字修飾,所以這兩個可變,需要的朋友可以參考下
    2024-01-01
  • SpringBoot2新特性 自定義端點詳解

    SpringBoot2新特性 自定義端點詳解

    這篇文章主要介紹了SpringBoot2新特性 自定義端點詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論