真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

好程序員分享大數(shù)據(jù)教程之線(xiàn)程高級(jí)部分

好程序員分享大數(shù)據(jù)教程之線(xiàn)程高級(jí)部分,首先講一下線(xiàn)程的生命周期

創(chuàng)新互聯(lián)主營(yíng)岐山網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開(kāi)發(fā),岐山h5微信小程序定制開(kāi)發(fā)搭建,岐山網(wǎng)站營(yíng)銷(xiāo)推廣歡迎岐山等地區(qū)企業(yè)咨詢(xún)

對(duì)于一個(gè)線(xiàn)程, 在被創(chuàng)建后, 不是立即就進(jìn)入到了運(yùn)行狀態(tài), 也不是一直處于運(yùn)行狀態(tài), 在線(xiàn)程的聲明周期中, 一個(gè)線(xiàn)程會(huì)在多種狀態(tài)之間進(jìn)行切換

new : 新生狀態(tài), 線(xiàn)程被實(shí)例化, 但是還沒(méi)有開(kāi)始執(zhí)行(start)

runnable: 就緒狀態(tài), 已經(jīng)執(zhí)行過(guò)start, 線(xiàn)程已經(jīng)啟動(dòng)了, 只是沒(méi)有搶到CPU時(shí)間片

running: 運(yùn)行狀態(tài), 搶到了CPU時(shí)間片

blocked: 阻塞狀態(tài), 線(xiàn)程執(zhí)行的過(guò)程中, 遇到一些特殊情況, 會(huì)進(jìn)入阻塞狀態(tài). 阻塞中的線(xiàn)程, 是不能參數(shù)時(shí)間片的搶奪的 (不能被線(xiàn)程調(diào)度器調(diào)度)

dead: 死亡狀態(tài), 線(xiàn)程終止

? 正常死亡 : run方法中的代碼執(zhí)行結(jié)束

? 非正常死亡 : 強(qiáng)制使用stop方法停止這個(gè)線(xiàn)程

好程序員分享大數(shù)據(jù)教程之線(xiàn)程高級(jí)部分

臨界資源問(wèn)題

由于線(xiàn)程之間是資源共享的。如果有多個(gè)線(xiàn)程,同時(shí)對(duì)一個(gè)數(shù)據(jù)進(jìn)行操作,此時(shí)這個(gè)數(shù)據(jù)會(huì)出現(xiàn)問(wèn)題。

如果有一個(gè)線(xiàn)程在訪(fǎng)問(wèn)一個(gè)臨界資源,在訪(fǎng)問(wèn)之前,先對(duì)這個(gè)資源“上鎖”,此時(shí)如果有其他的線(xiàn)程也需要訪(fǎng)問(wèn)這個(gè)臨界資源,需要先查這個(gè)資源有沒(méi)有被上鎖,如果沒(méi)有被上鎖,此時(shí)這個(gè)線(xiàn)程可以訪(fǎng)問(wèn)這個(gè)資源;如果上鎖了,則此時(shí)這個(gè)線(xiàn)程進(jìn)入阻塞狀態(tài),等待解鎖。

同步代碼段
// 同步代碼段

// 小括號(hào):就是鎖

// 大括號(hào):同步代碼段,一般情況下,寫(xiě)需要對(duì)臨界資源進(jìn)行的操作

synchronized () {

}

// 關(guān)于同步鎖:可以分成兩種:對(duì)象鎖、類(lèi)鎖

// 
同步方法
// 使用synchronized關(guān)鍵字修飾的方法就是同步方法

// 將一個(gè)方法中所有的代碼進(jìn)行一個(gè)同步

// 相當(dāng)于將一個(gè)方法中所有的代碼都放到一個(gè)synchronized代碼段中

// 同步方法的鎖:

// 1. 如果這個(gè)方法是一個(gè)非靜態(tài)方法:鎖是this

// 2. 如果這個(gè)方法是一個(gè)靜態(tài)方法:鎖是類(lèi)鎖(當(dāng)前類(lèi).class)

private synchronized void sellTicket() {

}
lock與unlock

就是一個(gè)類(lèi)RenntrantLock

線(xiàn)程死鎖(了解)

在解決臨界資源問(wèn)題的時(shí)候,我們引入了一個(gè)"鎖"的概念。我們可以用鎖對(duì)一個(gè)資源進(jìn)行保護(hù)。實(shí)際,在多線(xiàn)程的環(huán)境下,有可能會(huì)出現(xiàn)一種情況:

假設(shè)有A和B兩個(gè)線(xiàn)程,其中線(xiàn)程A持有鎖標(biāo)記a,線(xiàn)程B持有鎖標(biāo)記b,而此時(shí),線(xiàn)程A等待鎖標(biāo)記b的釋放,線(xiàn)程B等待鎖標(biāo)記a的釋放。這種情況,叫做 死鎖

生產(chǎn)者消費(fèi)者設(shè)計(jì)模式

wait() 、notify() 、notifyAll()

wait(): 等待。使得當(dāng)前的線(xiàn)程釋放鎖標(biāo)記,進(jìn)入等待隊(duì)列??梢允巩?dāng)前的線(xiàn)程進(jìn)入阻塞狀態(tài)。

notify(): 喚醒,喚醒等待隊(duì)列中的一個(gè)線(xiàn)程。

notifyAll(): 喚醒,喚醒等待隊(duì)列中所有的線(xiàn)程。

wait和sleep的區(qū)別:

  1. 兩個(gè)方法都可以使一個(gè)線(xiàn)程進(jìn)入阻塞。

  2. 區(qū)別:wait方法會(huì)釋放鎖標(biāo)記,sleep則不會(huì)釋放鎖標(biāo)記。
懶漢式單例設(shè)計(jì)模式中的線(xiàn)程安全問(wèn)題
線(xiàn)程池

ThreadPoolExecutor類(lèi)是線(xiàn)程池最核心的類(lèi)。這個(gè)類(lèi)的構(gòu)造方法中的幾個(gè)參數(shù):

int corePoolSize: 核心線(xiàn)程數(shù)量。核心池大小。

int maxmiunPoolSize: 線(xiàn)程池中最多的線(xiàn)程數(shù)量。

long keepAliveTime: 核心線(xiàn)程之外的臨時(shí)線(xiàn)程,能存活的時(shí)間。(從這個(gè)線(xiàn)程空閑的時(shí)候開(kāi)始算)

TimeUnit unit: 上面的時(shí)間單位

? NANOSECONDS: 納秒

? MICROSECONDS: 微秒

? MILLISEONDS: 毫秒

? SECONDS: 秒

? MINUTES: 分

? HOURS: 時(shí)

? DAYS: 天

BlockingQueue workQueue: 等待隊(duì)列

? ArrayBlockingQueue

? LinkedBlockingQueue

? SynchronousQueue

RejectedExecutionHandler handler:拒絕訪(fǎng)問(wèn)策略

預(yù)習(xí)方向:

  1. 網(wǎng)絡(luò)編程

  2. TCP

  3. UDP

網(wǎng)站題目:好程序員分享大數(shù)據(jù)教程之線(xiàn)程高級(jí)部分
當(dāng)前URL:http://weahome.cn/article/jshdcd.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部