日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

并发系列1:并发基础知识

發(fā)布時(shí)間:2024/1/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并发系列1:并发基础知识 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文是Java并發(fā)系列的開篇,主要講一些并發(fā)的計(jì)算機(jī)基礎(chǔ)知識(shí)。本系列所講的知識(shí)框架也是基于《Java并發(fā)編程的藝術(shù)》一書,所講的內(nèi)容也多圍繞于并發(fā)concurrent包下的類。

?

正文

并發(fā)的前提是多線程間的協(xié)同運(yùn)作,如果是程序是單線程運(yùn)作并發(fā)也無(wú)從談起。那么首先要理解兩個(gè)問(wèn)題。

什么是進(jìn)程、線程?

答:進(jìn)程是程序的運(yùn)行過(guò)程,有內(nèi)存空間、CPU運(yùn)行時(shí)間、IO設(shè)備,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。

  線程是CPU獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位,一個(gè)進(jìn)程里可以擁有多個(gè)線程,進(jìn)程空間包括不同線程可共同訪問(wèn)的公共空間和私有空間。

Java開啟多線程的方式?

1、裝配runnable接口,重寫run()方法。

2、繼承Thread類,重寫它的Start方法。

Java線程狀態(tài)?

Java線程間的協(xié)作方式?

  顯然,不進(jìn)行協(xié)作的多線程它們的作用要大打折扣,而線程協(xié)作關(guān)注的兩個(gè)重要問(wèn)題是Java線程間如何進(jìn)行通信以及線程間如何進(jìn)行同步?

  Java采用的共享內(nèi)存模型,線程間通過(guò)正確同步和讀寫共享內(nèi)存數(shù)據(jù)達(dá)到線程通信和同步的目的,當(dāng)然要正確的讀寫共享內(nèi)存絕不是容易的事情,它包括了很多并發(fā)知識(shí)。但我們現(xiàn)在只要建立這種認(rèn)知就夠了。

  Java間有以下協(xié)作的方式:1、等待通知機(jī)制(Synchronized和object配合、Lock和Condition配合)

              2、volatile

              3、synchronized

              4、管道流

   它們直接的詳細(xì)內(nèi)容會(huì)在后文講到。

為什么會(huì)出現(xiàn)并發(fā)結(jié)果不一致問(wèn)題?

  為什么沒(méi)有正確編寫程序會(huì)引發(fā)并發(fā)問(wèn)題?這跟計(jì)算機(jī)底層運(yùn)行機(jī)制有關(guān)。

  1、重排序問(wèn)題(重排序?yàn)榱颂岣叱绦蜻\(yùn)行效率),Java重排需只保證了單線程的結(jié)果一致性,沒(méi)有保證多線程結(jié)果一致性,保證多線程結(jié)果一致性的是happens-before規(guī)則。重排序包括編譯器重排序、指令集重排序、CPU重排序,它們都會(huì)讓多線程出現(xiàn)并發(fā)問(wèn)題。

  2緩存問(wèn)題,首先Java線程通信是采用共享內(nèi)存的方式通信,A線程將數(shù)據(jù)寫入主內(nèi)存,B線程從主內(nèi)存讀取數(shù)據(jù)以達(dá)到通信目的。系統(tǒng)為了提高效率建立了緩存,它導(dǎo)致了線程和共享內(nèi)存間的通信并不是即時(shí)的,所以會(huì)出現(xiàn)并發(fā)問(wèn)題。

  Java本身也只是保證了as-if-serial語(yǔ)言,即保證單線程程序運(yùn)算結(jié)果不會(huì)改變。而對(duì)于多線程結(jié)果不改變的語(yǔ)義happens-before語(yǔ)義則只保證正確同步的程序結(jié)果不變。

  Java保證并發(fā)Volatile、Sychronized關(guān)鍵字和CAS操作起到了關(guān)鍵作用,它們的知識(shí)點(diǎn)在下篇文章:

? ? ? ?https://www.cnblogs.com/llsblog/p/10629168.html

?

轉(zhuǎn)載于:https://www.cnblogs.com/llsblog/p/10629119.html

總結(jié)

以上是生活随笔為你收集整理的并发系列1:并发基础知识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。