日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文主要對(duì)JAVA并發(fā)(Concurrent)相關(guān)的概念進(jìn)行說(shuō)明。

1.進(jìn)程(Process)與線程(Thread)

  1. 進(jìn)程是系統(tǒng)資源分配的最小單元。線程是CPU調(diào)度的最小單元。
  2. 一個(gè) 進(jìn)程至少包含一個(gè)線程,可以包含多個(gè)線程。這些線程共享這個(gè)進(jìn)程的資源。
  3. 每個(gè)線程都擁有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器,線程切換開銷小。
  4. 多進(jìn)程指的是操作系統(tǒng)同時(shí)運(yùn)行多個(gè)程序,如當(dāng)前操作系統(tǒng)中同時(shí)運(yùn)行著QQ、IE、微信等程序。
  5. 多線程指的是同一進(jìn)程中同時(shí)運(yùn)行多個(gè)線程,如迅雷運(yùn)行時(shí),可以開啟多個(gè)線程,同時(shí)進(jìn)行多個(gè)文件的下載。

2.并行(Parallel)、并發(fā)(Concurrent)與多線程(Multithreading)

  1. 并行是指多個(gè)任務(wù)在同一時(shí)刻進(jìn)行。并發(fā)是指多個(gè)任務(wù)在同一時(shí)間段內(nèi)發(fā)生。
  2. 并行是物理上的同時(shí)發(fā)生,而并發(fā)是邏輯上的同時(shí)發(fā)生。
  3. 體現(xiàn)在程序上: 并行是指多個(gè)CPU內(nèi)核在同一時(shí)刻,同時(shí)運(yùn)行多個(gè)任務(wù)。并發(fā)是指單個(gè)CPU內(nèi),通過(guò)CPU調(diào)度算法,讓用戶感覺在同時(shí)運(yùn)行多個(gè)任務(wù)。
  4. 更形象的說(shuō)法: 并行是指兩隊(duì)人員同時(shí)使用兩臺(tái)咖啡機(jī)。并發(fā)是指兩隊(duì)人員交替使用同一臺(tái)咖啡機(jī)。—-Erlang 之父 Joe Armstrong。
五分鐘看穿Java并發(fā)相關(guān)概念,并發(fā)原來(lái)如此簡(jiǎn)單

 

  1. 多線程即多個(gè)線程,一般只多個(gè)同時(shí)在運(yùn)行的單線程。
  2. 如果是在單核CPU上,多線程肯定是并發(fā)運(yùn)行的。如果是在多核CPU上,這些多線程也可能是并行運(yùn)行。

3.線程安全

線程安全,指的是在并發(fā)的情況之下,線程的調(diào)度順序不影響運(yùn)行結(jié)果。

如不加鎖控制的轉(zhuǎn)賬操作,在單線程運(yùn)行中是安全的,但是在多線程環(huán)境中,肯定是不安全的。這里只給出示例,具體邏輯就沒不解釋了。

void transferMoney(User from, User to, float amount){
    to.setMoney(to.getBalance() + amount);
    from.setMoney(from.getBalance() - amount);
}

4.死鎖

死鎖是指兩個(gè)或更多線程阻塞著等待其它處于死鎖狀態(tài)的線程所持有的鎖。

例如,

  • 如果線程1鎖住了A,然后嘗試對(duì)B進(jìn)行加鎖,同時(shí)線程2已經(jīng)鎖住了B,接著嘗試對(duì)A進(jìn)行加鎖,這時(shí)死鎖就發(fā)生了。
  • 線程1永遠(yuǎn)得不到B,線程2也永遠(yuǎn)得不到A,并且它們永遠(yuǎn)也不會(huì)知道發(fā)生了這樣的事情。
  • 為了得到彼此的對(duì)象(A和B),它們將永遠(yuǎn)阻塞下去。這種情況就是一個(gè)死鎖。

5.并發(fā)優(yōu)點(diǎn)

5.1.資源利用率高

假定場(chǎng)景:需要從本地讀取和處理兩個(gè)文件,讀取一個(gè)文件需要5秒,處理一個(gè)文件需要2秒。單線程:

5秒讀取文件A
2秒處理文件A
5秒讀取文件B
2秒處理文件B
---------------------
總共需要14秒

多線程:

5秒讀取文件A
5秒讀取文件B + 2秒處理文件A
2秒處理文件B
---------------------
總共需要12秒

總結(jié):

  • 在等待磁盤讀取文件的時(shí)候,CPU大部分時(shí)間是空閑的。
  • 利用多線程編程,可以在磁盤讀取文件的CPU空閑時(shí)間內(nèi)做一些其他的事情。
  • 所以說(shuō), 使用多線程資源利用率更高。

5.2.程序響應(yīng)更快

一個(gè)桌面應(yīng)用程序存在多個(gè)按鈕。點(diǎn)擊這些按鈕,可以分別進(jìn)行一些耗時(shí)的工作。

單線程:

每次點(diǎn)擊一個(gè)按鈕,都會(huì)進(jìn)行一項(xiàng)耗時(shí)的工作。必須等待此項(xiàng)工作完成之后,才能繼續(xù)監(jiān)聽用戶操作。這時(shí),用戶才能點(diǎn)擊其他按鈕,進(jìn)行其他的工作。這樣的應(yīng)用程序,對(duì)用戶而言,響應(yīng)十分慢,體驗(yàn)度很差。

多線程:

每次點(diǎn)擊一個(gè)按鈕,都會(huì)啟動(dòng)一個(gè)子線程去進(jìn)行這項(xiàng)耗時(shí)的工作,主線程繼續(xù)監(jiān)聽用戶操作。這種情況下,用戶可以快速的分別點(diǎn)擊需要處理的按鈕。這樣的應(yīng)用程序,對(duì)用戶而言,響應(yīng)很快,體驗(yàn)度很好。

6.并發(fā)缺點(diǎn)

6.1.設(shè)計(jì)開發(fā)更復(fù)雜

線程之間的交互往往非常復(fù)雜。 不正確的線程同步產(chǎn)生的錯(cuò)誤非常難以發(fā)現(xiàn),并且難以重現(xiàn)、難以修復(fù)。

6.2.增加額外資源消耗

多線程開發(fā)會(huì)產(chǎn)生額外的資源消耗,主要來(lái)源于三個(gè)方面:

  • 線程本身需要消耗一些資源進(jìn)行本地堆棧的維持與管理。
  • 線程之間切換會(huì)導(dǎo)致的上下文切換(Context Switch)開銷。
  • 多線程的管理對(duì)CPU來(lái)說(shuō)又是一筆開銷。

所以,由于多線程會(huì)增加額外的資源消耗,對(duì)多線程程序而言,線程并不是越多就會(huì)越快,過(guò)多的線程返回會(huì)導(dǎo)致程序變慢。

分享到:
標(biāo)簽:并發(fā) Java
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定