說到j(luò)ava的話達內(nèi)科技的小編相信大家肯定是不陌生的了,對于java來說從問世以來一直在開發(fā)界有著很高的地位的。很多的產(chǎn)品在開發(fā)語言的選擇上也肯定是java
的,所以說大家對于java語言的熟悉度就很高的了,那么什么是java的并發(fā)編程呢?
1、線程基礎(chǔ)概念
線程是指在一個單獨進程中,對于CPU和內(nèi)存而言的多個工作單位,所有線程在進程中的資源都是共享的,包括全局數(shù)據(jù)、執(zhí)行代碼等。
cpu核心數(shù)與線程數(shù)
核心數(shù) : 線程數(shù) = 1 : 1
如一個8核的cpu,該cpu會至少支持8個線程同時運行
intel引入了超線程技術(shù)后:
核心數(shù) : 線程數(shù) = 1 : 2
在編碼過程中可以感覺到同時運行的線程遠遠不止這些。由于cpu的時間片輪轉(zhuǎn)機制又稱RR調(diào)度,簡單點講,操作系統(tǒng)會把已就緒的線程排成一個隊列,給每個進程一個時間分片,該線程在cpu中執(zhí)行完這個時間分片后,不論是否執(zhí)行完都會讓出cpu資源給另外的線程,這樣在某一時間段內(nèi)就好像有很多線程在同時運行。
操作系統(tǒng)和cpu在進行時間分片的任務(wù)切換時也是需要時間的,而且往往占用的時間比例又很大,所以在多線程開發(fā)時關(guān)注上下文切換對于多線程執(zhí)行時間和性能的影響。
二、進程和線程區(qū)別
進程:程序運行進行資源分配的小單位,進程中有多個線程,會共享這個線程的資源
線程:cpu調(diào)度的小單位,必須依賴進程而存在
例子:啟動的一個jar包程序就是一個進程,而可以通過啟動參數(shù)配置它的內(nèi)存大小,-xmx,-xms等。而每一個請求都是在線程上去進行的,cpu通過執(zhí)行線程任務(wù)完成每個請求任務(wù)。
三、并行和并發(fā)
并行:同一時刻,可以同時處理事情的能力
并發(fā):與單位時間有關(guān),在單位時間內(nèi)可以處理問題的能力
舉個例子,假設(shè)不考慮超線程技術(shù),一個4核cpu在任何一個時刻處理的是4個線程,并行數(shù)為4,而由于時間片輪轉(zhuǎn)機制,它在1秒內(nèi)可以支持處理100個線程,它在1秒內(nèi)的并發(fā)數(shù)為100
四、高并發(fā)編程優(yōu)勢
充分利用cpu的資源。如果是單線程,只占用一個核,其它的空閑;加快響應(yīng)時間。合理的設(shè)計多線程程序,使請求處理加快;程序模塊化異步化
線程共享資源,會存在沖突、會存在死鎖、啟動線程太多,濫用線程,壓垮服務(wù)器。線程方法,java線程是協(xié)作式的,而不是搶占式
五、線程終止的方法interrupt()
線程之前提供了stop(),resume(),suspend()方法來終止線程,但已不建議使用,stop()會導(dǎo)致線程不會正確的釋放資源,suspend()會導(dǎo)致死鎖。
要通過interrupt(),isInterrupted(),static interrupted()來自己實現(xiàn)中斷線程
interrupt() :調(diào)用一個線程的interrupt()
方法中斷一個線程,并不是強行關(guān)閉這個線程,只是跟這個線程打個招呼,將線程的中斷標志位置為true,線程是否中斷,由線程本身決定。
isInterrupted(): 判定當前線程是否處于中斷狀態(tài)。
static interrupted() :判定當前線程是否處于中斷狀態(tài),同時中斷標志位改為false。
thead.setPriority()方法
優(yōu)先級的范圍1~100,缺省為5,但線程的優(yōu)先級不可靠,不建議作為線程開發(fā)時候的手段。
java線程是映射到系統(tǒng)的原生線程來實現(xiàn)的,所以線程的調(diào)度終決定于操作系統(tǒng)。雖然現(xiàn)在很多操作系統(tǒng)提供了線程優(yōu)先級的概念,但是不見得會與java線程的優(yōu)先級一一對應(yīng),如果優(yōu)先級比java線程多還好說,要是少的話,就不得不出現(xiàn)幾個優(yōu)先級相同的情況了。
Java的并發(fā)編程是比較復(fù)雜的,在學習的過程中可能會出現(xiàn)錯亂,但是如果說你有一個專業(yè)的講師來指導(dǎo)的話肯定是沒有問題的。達內(nèi)科技歡迎每位想要學習java語言的學員來我們公司的java培訓(xùn)班進行實地考察,也可以點擊我們文章下面的獲取試聽資格按鈕來獲取我們的java課程免費試聽資格,在試聽中可以更加深入的了解我們達內(nèi)科技。