国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java高并發(fā)之從零到放棄(一)

luoyibu / 286人閱讀

摘要:今天就先到這里,大家可以看看這些內(nèi)容的拓展記得點(diǎn)關(guān)注看更新,謝謝閱讀

前言

這是一個(gè)長(zhǎng)篇博客,希望大家關(guān)注我并且一起學(xué)習(xí)java高并發(fā)
廢話不多說(shuō),直接開(kāi)始

并行和并發(fā)

并行:多個(gè)線程同時(shí)處理多個(gè)任務(wù)
并發(fā):多個(gè)線程處理同個(gè)任務(wù),不一定要同時(shí)

下面用圖來(lái)描述并行和并發(fā)的區(qū)別:
(實(shí)現(xiàn)和虛線表示兩個(gè)不同的線程)

臨界區(qū)

是受保護(hù)的資源,可以被多個(gè)線程使用,但是每次只能有一個(gè)線程可以使用它

死鎖,饑餓,活鎖

死鎖
因?yàn)橛行┵Y源的彼此交叉使用,大家都阻塞了線程,所有關(guān)于這個(gè)資源的線程全部無(wú)法工作
饑餓
一個(gè)資源被高優(yōu)先級(jí)別的線程不斷搶占著,導(dǎo)致低優(yōu)先級(jí)的線程無(wú)法工作
某一個(gè)線程一致占著資源不放,導(dǎo)致需要這個(gè)資源的線程無(wú)法正常工作
活鎖
多個(gè)線程都主動(dòng)將資源釋放給他人使用,就會(huì)出現(xiàn)資源不斷在兩個(gè)線程中跳動(dòng),而沒(méi)有一個(gè)線程可以正常執(zhí)行

JMM(java內(nèi)存模型)

在并行程序中,就是int i =1都變得及其復(fù)雜

下面來(lái)看下JMM的三個(gè)特性

1. 原子性

和數(shù)據(jù)庫(kù)的原子性一樣,是指一個(gè)操作是不可中斷的,即使是在多個(gè)線程一起執(zhí)行的時(shí)候,一個(gè)操作一旦開(kāi)始,就不會(huì)被其它線程干擾

2. 可見(jiàn)性

當(dāng)一個(gè)線程修改了某個(gè)共享的值,其它線程是否立即知道這個(gè)修改。這個(gè)問(wèn)題在串行程序中是沒(méi)有的
在并行中實(shí)現(xiàn)可見(jiàn)性需要滿足以下兩個(gè)條件:

1.線程修改后的共享變量的值能夠及時(shí)從工作內(nèi)存刷新到主內(nèi)存中
2.其他線程能夠及時(shí)把共享變量的最新值從主內(nèi)存更新到自己的工作內(nèi)存中

因此synchronized實(shí)現(xiàn)了可見(jiàn)性和原子性:
對(duì)于synchronized的操作JMM有兩條規(guī)定:

1.線程解鎖前,必須把共享變量的最新值刷新到主內(nèi)存
2.線程加鎖時(shí),將清空工作內(nèi)存中共享變量的值,從而使用共享變量時(shí)需從主內(nèi)存中重新讀取最新的值(加鎖與解鎖需要同一把鎖)

3.有序性

對(duì)于串行程序來(lái)說(shuō),按照順序進(jìn)行任務(wù)是必然的,但是在并行中卻不一樣了
比如1號(hào)線程要執(zhí)行兩個(gè)變量的賦值,但是第一個(gè)變量上了鎖,要等待解鎖,那么它可能就會(huì)先對(duì)第二個(gè)變量進(jìn)行賦值(這就是指令重排,是jmm特性,可以提高性能)

這時(shí)候2號(hào)線程去調(diào)用一號(hào)線程的第一個(gè)變量,但1號(hào)線程還沒(méi)有來(lái)得及對(duì)它賦值,那么這時(shí)候就沒(méi)有保證有序性了。那么為了保證有序性就要用到volatile關(guān)鍵字。

今天就先到這里,大家可以看看這些內(nèi)容的拓展
記得點(diǎn)關(guān)注看更新,謝謝閱讀

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68058.html

相關(guān)文章

  • java并發(fā)之從零到放棄(二)

    摘要:可以用代替可以用代替定義的對(duì)象的值是不可變的今天就先到這里,大家可以看看這些內(nèi)容的拓展記得點(diǎn)關(guān)注看更新,謝謝閱讀 前言 java高并發(fā)第二篇講的是java線程的基礎(chǔ)依舊不多說(shuō)廢話 線程和進(jìn)程 進(jìn)程是操作系統(tǒng)運(yùn)行的基礎(chǔ),是一個(gè)程序運(yùn)行的實(shí)體,windows上打開(kāi)任務(wù)管理器就能看到進(jìn)程線程是輕量級(jí)的進(jìn)程,是程序執(zhí)行的最小單位,是在進(jìn)程這個(gè)容器下進(jìn)行的 線程基本操作 新建一個(gè)線程類有兩種方式...

    cloud 評(píng)論0 收藏0
  • java并發(fā)之從零到放棄(四)

    摘要:前言本篇主要講解如何去優(yōu)化鎖機(jī)制或者克服多線程因?yàn)殒i可導(dǎo)致性能下降的問(wèn)題線程變量有這樣一個(gè)場(chǎng)景,前面是一大桶水,個(gè)人去喝水,為了保證線程安全,我們要在杯子上加鎖導(dǎo)致大家輪著排隊(duì)喝水,因?yàn)榧恿随i的杯子是同步的,只能有一個(gè)人拿著這個(gè)唯一的杯子喝 前言 本篇主要講解如何去優(yōu)化鎖機(jī)制或者克服多線程因?yàn)殒i可導(dǎo)致性能下降的問(wèn)題 ThreadLocal線程變量 有這樣一個(gè)場(chǎng)景,前面是一大桶水,10個(gè)...

    Alex 評(píng)論0 收藏0
  • java并發(fā)之從零到放棄(三)

    摘要:前言今天講的多線程的同步控制直接進(jìn)入正題重入鎖重入鎖可以完全代替,它需要類來(lái)實(shí)現(xiàn)下面用一個(gè)簡(jiǎn)單的例子來(lái)實(shí)現(xiàn)重入鎖以上代碼打印出來(lái)的是,可以說(shuō)明也實(shí)現(xiàn)了線程同步它相比更加靈活,因?yàn)橹厝腈i實(shí)現(xiàn)了用戶自己加鎖,自己釋放鎖記得一定要釋放,不然其他線 前言 今天講的多線程的同步控制直接進(jìn)入正題 ReentrantLock重入鎖 重入鎖可以完全代替synchronized,它需要java.util...

    FrozenMap 評(píng)論0 收藏0
  • java并發(fā)之從零到放棄(五)

    摘要:前言這篇主要來(lái)講解多線程中一個(gè)非常經(jīng)典的設(shè)計(jì)模式包括它的基礎(chǔ)到拓展希望大家能夠有所收獲生產(chǎn)者消費(fèi)者模式簡(jiǎn)述此設(shè)計(jì)模式中主要分兩類線程生產(chǎn)者線程和消費(fèi)者線程生產(chǎn)者提供數(shù)據(jù)和任務(wù)消費(fèi)者處理數(shù)據(jù)和任務(wù)該模式的核心就是數(shù)據(jù)和任務(wù)的交互點(diǎn)共享內(nèi)存緩 前言 這篇主要來(lái)講解多線程中一個(gè)非常經(jīng)典的設(shè)計(jì)模式包括它的基礎(chǔ)到拓展希望大家能夠有所收獲 生產(chǎn)者-消費(fèi)者模式簡(jiǎn)述 此設(shè)計(jì)模式中主要分兩類線程:生產(chǎn)者...

    meislzhua 評(píng)論0 收藏0
  • 前端從零開(kāi)始系列

    摘要:只有動(dòng)手,你才能真的理解作者的構(gòu)思的巧妙只有動(dòng)手,你才能真正掌握一門(mén)技術(shù)持續(xù)更新中項(xiàng)目地址求求求源碼系列跟一起學(xué)如何寫(xiě)函數(shù)庫(kù)中高級(jí)前端面試手寫(xiě)代碼無(wú)敵秘籍如何用不到行代碼寫(xiě)一款屬于自己的類庫(kù)原理講解實(shí)現(xiàn)一個(gè)對(duì)象遵循規(guī)范實(shí)戰(zhàn)手摸手,帶你用擼 Do it yourself!!! 只有動(dòng)手,你才能真的理解作者的構(gòu)思的巧妙 只有動(dòng)手,你才能真正掌握一門(mén)技術(shù) 持續(xù)更新中…… 項(xiàng)目地址 https...

    Youngdze 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<