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

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

android多線程,android多線程并發(fā)實(shí)例

每個(gè)Android 都應(yīng)必須了解的多線程知識(shí)點(diǎn)~

進(jìn)程是系統(tǒng)調(diào)度和資源分配的一個(gè)獨(dú)立單位。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)頁(yè)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、通山網(wǎng)站維護(hù)、網(wǎng)站推廣。

在Android中,一個(gè)應(yīng)用程序就是一個(gè)獨(dú)立的集成,應(yīng)用運(yùn)行在一個(gè)獨(dú)立的環(huán)境中,可以避免其他應(yīng)用程序/進(jìn)程的干擾。當(dāng)我們啟動(dòng)一個(gè)應(yīng)用程序時(shí),系統(tǒng)就會(huì)創(chuàng)建一個(gè)進(jìn)程(該進(jìn)程是從Zygote中fork出來(lái)的,有獨(dú)立的ID),接著為這個(gè)進(jìn)程創(chuàng)建一個(gè)主線程,然后就可以運(yùn)行MainActivity了,應(yīng)用程序的組件默認(rèn)都是運(yùn)行在其進(jìn)程中。開(kāi)發(fā)者可以通過(guò)設(shè)置應(yīng)用的組件的運(yùn)行進(jìn)程,在清單文件中給組件設(shè)置:android:process = "進(jìn)程名";可以達(dá)到讓組件運(yùn)行在不同進(jìn)程中的目的。讓組件運(yùn)行在不同的進(jìn)程中,既有好處,也有壞處。我們依次的說(shuō)明下。

好處:每一個(gè)應(yīng)用程序(也就是每一個(gè)進(jìn)程)都會(huì)有一個(gè)內(nèi)存預(yù)算,所有運(yùn)行在這個(gè)進(jìn)程中的程序使用的總內(nèi)存不能超過(guò)這個(gè)值,讓組件運(yùn)行不同的進(jìn)程中,可以讓主進(jìn)程可以擁有更多的空間資源。當(dāng)我們的應(yīng)用程序比較大,需要的內(nèi)存資源比較多時(shí)(也就是用戶會(huì)抱怨應(yīng)用經(jīng)常出現(xiàn)OutOfMemory時(shí)),可以考慮使用多進(jìn)程。

壞處:每個(gè)進(jìn)程都會(huì)有自己的虛擬機(jī)實(shí)例,因此讓在進(jìn)程間共享一些數(shù)據(jù)變得相對(duì)困難,需要采用進(jìn)程間的通信來(lái)實(shí)現(xiàn)數(shù)據(jù)的共享。

線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。

在Android中,線程會(huì)有那么幾種狀態(tài):創(chuàng)建、就緒、運(yùn)行、阻塞、結(jié)束。當(dāng)應(yīng)用程序有組件在運(yùn)行時(shí),UI線程是處于運(yùn)行狀態(tài)的。默認(rèn)情況下,應(yīng)用的所有組件的操作都是在UI線程里完成的,包括響應(yīng)用戶的操作(觸摸,點(diǎn)擊等),組件生命周期方法的調(diào)用,UI的更新等。因此如果UI線程處理阻塞狀態(tài)時(shí)(在線程里做一些耗時(shí)的操作,如網(wǎng)絡(luò)連接等),就會(huì)不能響應(yīng)各種操作,如果阻塞時(shí)間達(dá)到5秒,就會(huì)讓程序處于ANR(application not response)狀態(tài)。

1.線程作用

減少程序在并發(fā)執(zhí)行時(shí)所付出的時(shí)空開(kāi)銷,提高操作系統(tǒng)的并發(fā)性能。

2.線程分類

守護(hù)線程、非守護(hù)線程(用戶線程)

2.1 守護(hù)線程

定義:守護(hù)用戶線程的線程,即在程序運(yùn)行時(shí)為其他線程提供一種通用服務(wù)

常見(jiàn):如垃圾回收線程

設(shè)置方式:thread.setDaemon(true);//設(shè)置該線程為守護(hù)線程

2.2 非守護(hù)線程(用戶線程)

主線程 子線程。

2.2.1 主線程(UI線程)

定義:Android系統(tǒng)在程序啟動(dòng)時(shí)會(huì)自動(dòng)啟動(dòng)一條主線程

作用:處理四大組件與用戶進(jìn)行交互的事情(如UI、界面交互相關(guān))

因?yàn)橛脩綦S時(shí)會(huì)與界面發(fā)生交互,因此主線程任何時(shí)候都必須保持很高的響應(yīng)速度,所以主線程不允許進(jìn)行耗時(shí)操作,否則會(huì)出現(xiàn)ANR。

2.2.2 子線程(工作線程)

定義:手動(dòng)創(chuàng)建的線程

作用:耗時(shí)的操作(網(wǎng)絡(luò)請(qǐng)求、I/O操作等)

2.3 守護(hù)線程與非守護(hù)線程的區(qū)別和聯(lián)系

區(qū)別:虛擬機(jī)是否已退出,即

a. 當(dāng)所有用戶線程結(jié)束時(shí),因?yàn)闆](méi)有守護(hù)的必要,所以守護(hù)線程也會(huì)終止,虛擬機(jī)也同樣退出

b. 反過(guò)來(lái),只要任何用戶線程還在運(yùn)行,守護(hù)線程就不會(huì)終止,虛擬機(jī)就不會(huì)退出

3.線程優(yōu)先級(jí)

3.1 表示

線程優(yōu)先級(jí)分為10個(gè)級(jí)別,分別用Thread類常量表示。

3.2 設(shè)置

通過(guò)方法setPriority(int grade)進(jìn)行優(yōu)先級(jí)設(shè)置,默認(rèn)線程優(yōu)先級(jí)是5,即 Thread.NORM_PRIORITY。

4.線程狀態(tài)

創(chuàng)建狀態(tài):當(dāng)用 new 操作符創(chuàng)建一個(gè)線程的時(shí)候

就緒狀態(tài):調(diào)用 start 方法,處于就緒狀態(tài)的線程并不一定馬上就會(huì)執(zhí)行 run 方法,還需要等待CPU的調(diào)度

運(yùn)行狀態(tài):CPU 開(kāi)始調(diào)度線程,并開(kāi)始執(zhí)行 run 方法

阻塞(掛起)狀態(tài):線程的執(zhí)行過(guò)程中由于一些原因進(jìn)入阻塞狀態(tài),比如:調(diào)用 sleep/wait 方法、嘗試去得到一個(gè)鎖等

結(jié)束(消亡)狀態(tài):run 方法執(zhí)行完 或者 執(zhí)行過(guò)程中遇到了一個(gè)異常

(1)start()和run()的區(qū)別

通過(guò)調(diào)用Thread類的start()方法來(lái)啟動(dòng)一個(gè)線程,這時(shí)此線程是處于就緒狀態(tài),并沒(méi)有運(yùn)行。調(diào)用Thread類調(diào)用run()方法來(lái)完成其運(yùn)行操作的,方法run()稱為線程體,它包含了要執(zhí)行的這個(gè)線程的內(nèi)容,run()運(yùn)行結(jié)束,此線程終止,然后CPU再調(diào)度其它線程。

(2)sleep()、wait()、yield()的區(qū)別

sleep()方法屬于Thread類,wait()方法屬于Object類。

調(diào)用sleep()方法,線程不會(huì)釋放對(duì)象鎖,只是暫停執(zhí)行指定的時(shí)間,會(huì)自動(dòng)恢復(fù)運(yùn)行狀態(tài);調(diào)用wait()方法,線程會(huì)放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,不調(diào)用notify()方法,線程永遠(yuǎn)處于就緒(掛起)狀態(tài)。

yield()直接由運(yùn)行狀態(tài)跳回就緒狀態(tài),表示退讓線程,讓出CPU,讓CPU調(diào)度器重新調(diào)度。禮讓可能成功,也可能不成功,也就是說(shuō),回到調(diào)度器和其他線程進(jìn)行公平競(jìng)爭(zhēng)。

1.Android線程的原則

(1)為什么不能再主線程中做耗時(shí)操作

防止ANR, 不能在UI主線程中做耗時(shí)的操作,因此我們可以把耗時(shí)的操作放在另一個(gè)工作線程中去做。操作完成后,再通知UI主線程做出相應(yīng)的響應(yīng)。這就需要掌握線程間通信的方式了。 在Android中提供了兩種線程間的通信方式:一種是AsyncTask機(jī)制,另一種是Handler機(jī)制。

(2)為什么不能在非UI線程中更新UI 因?yàn)锳ndroid的UI線程是非線程安全的,應(yīng)用更新UI,是調(diào)用invalidate()方法來(lái)實(shí)現(xiàn)界面的重繪,而invalidate()方法是非線程安全的,也就是說(shuō)當(dāng)我們?cè)诜荱I線程來(lái)更新UI時(shí),可能會(huì)有其他的線程或UI線程也在更新UI,這就會(huì)導(dǎo)致界面更新的不同步。因此我們不能在非UI主線程中做更新UI的操作。

2.Android實(shí)現(xiàn)多線程的幾種方式

3.為何需要多線程

多線程的本質(zhì)就是異步處理,直觀一點(diǎn)說(shuō)就是不要讓用戶感覺(jué)到“很卡”。

4.多線程機(jī)制的核心是啥

多線程核心機(jī)制是Handler

推薦Handler講解視頻: 面試總被問(wèn)到Handler?帶你從源碼的角度解讀Handler核心機(jī)制

根據(jù)上方提到的 多進(jìn)程、多線程、Handler 問(wèn)題,我整理了一套 Binder與Handler 機(jī)制解析的學(xué)習(xí)文檔,提供給大家進(jìn)行學(xué)習(xí)參考,有需要的可以 點(diǎn)擊這里直接獲?。。?! 里面記錄許多Android 相關(guān)學(xué)習(xí)知識(shí)點(diǎn)。

Android多線程的四種方式:Handler、AsyncTask、ThreadPoolExector、IntentService

異步通信機(jī)制,將工作線程中需更新UI的操作信息 傳遞到 UI主線程,從而實(shí)現(xiàn) 工作線程對(duì)UI的更新處理,最終實(shí)現(xiàn)異步消息的處理。Handler不僅僅能將子線程的數(shù)據(jù)傳遞給主線程,它能實(shí)現(xiàn)任意兩個(gè)線程的數(shù)據(jù)傳遞。

(1)Message

Message 可以在線程之間傳遞消息。可以在它的內(nèi)部攜帶少量數(shù)據(jù),用于在不同線程之間進(jìn)行數(shù)據(jù)交換。除了 what 字段,還可以使用 arg1 和 arg2 來(lái)攜帶整型數(shù)據(jù),使用 obj 來(lái)攜帶 Object 數(shù)據(jù)。

(2) Handler

Handler 作為處理中心,用于發(fā)送(sendMessage 系列方法)與處理消息(handleMessage 方法)。

(3) MessageQueue

MessageQueue 用于存放所有通過(guò) Handler 發(fā)送的消息。這部分消息會(huì)一直存放在消息隊(duì)列中,直到被處理。每個(gè)線程中只會(huì)有一個(gè) MessageQueue 對(duì)象

(4) Looper

Looper 用于管理 MessageQueue 隊(duì)列,Looper對(duì)象通過(guò)loop()方法開(kāi)啟了一個(gè)死循環(huán)——for (;;){},不斷地從looper內(nèi)的MessageQueue中取出Message,并傳遞到 Handler 的 handleMessage() 方法中。每個(gè)線程中只會(huì)有一個(gè) Looper 對(duì)象。

AsyncTask 是一種輕量級(jí)的任務(wù)異步類,可以在后臺(tái)子線程執(zhí)行任務(wù),且將執(zhí)行進(jìn)度及執(zhí)行結(jié)果傳遞給 UI 線程。

(1)onPreExecute()

在 UI 線程上工作,在任務(wù)執(zhí)行 doInBackground() 之前調(diào)用。此步驟通常用于設(shè)置任務(wù),例如在用戶界面中顯示進(jìn)度條。

(2)doInBackground(Params... params)

在子線程中工作,在 onPreExecute() 方法結(jié)束后執(zhí)行,這一步被用于在后臺(tái)執(zhí)行長(zhǎng)時(shí)間的任務(wù),Params 參數(shù)通過(guò) execute(Params) 方法被傳遞到此方法中。任務(wù)執(zhí)行結(jié)束后,將結(jié)果傳遞給 onPostExecute(Result) 方法,同時(shí)我們可以通過(guò) publishProgress(Progress) 方法,將執(zhí)行進(jìn)度發(fā)送給 onProgressUpdate(Progress) 方法。

(3)onProgressUpdate(Progress... values)

在 UI 線程上工作,會(huì)在 doInBackground() 中調(diào)用 publishProgress(Progress) 方法后執(zhí)行,此方法用于在后臺(tái)計(jì)算仍在執(zhí)行時(shí)(也就是 doInBackgound() 還在執(zhí)行時(shí))將計(jì)算執(zhí)行進(jìn)度通過(guò) UI 顯示出來(lái)。例如,可以通過(guò)動(dòng)畫(huà)進(jìn)度條或顯示文本字段中的日志,從而方便用戶知道后臺(tái)任務(wù)執(zhí)行的進(jìn)度。

(4)onPostExecute(Result result)

在 UI 線程上工作,在任務(wù)執(zhí)行完畢(即 doInBackground(Result) 執(zhí)行完畢)并將執(zhí)行結(jié)果傳過(guò)來(lái)的時(shí)候工作。

使用規(guī)則:

(1)AsyncTask 是個(gè)抽象類,所以要?jiǎng)?chuàng)建它的子類實(shí)現(xiàn)抽象方法

(1)AsyncTask 類必須是在 UI 線程中被加載,但在Android 4.1(API 16)開(kāi)始,就能被自動(dòng)加載完成。

(2)AsyncTask 類的實(shí)例對(duì)象必須在 UI 線程中被創(chuàng)建。

(3)execute() 方法必須是在 UI 線程中被調(diào)用。

(4)不要手動(dòng)調(diào)用方法 onPreExecute()、onPostExecute()、doInBackground()、onProgressUpdate()

(5)任務(wù)只能執(zhí)行一次(如果嘗試第二次執(zhí)行,將拋出異常)。即一個(gè)AsyncTask對(duì)象只能調(diào)用一次execute()方法。

原理:

? ? ? 其源碼中原理還是 Thread 與 Handler 的實(shí)現(xiàn),其包含 兩個(gè)線程池,一個(gè) Handler,如下所示:

名稱類型作用

SERIAL_EXECUTOR線程池分發(fā)任務(wù),串行分發(fā),一次只分發(fā)一個(gè)任務(wù)

THREAD_POOL_EXECUTOR線程池執(zhí)行任務(wù),并行執(zhí)行,執(zhí)行的任務(wù)由 SERIAL_EXECUTOR 分發(fā)

InternalHandlerHandler負(fù)責(zé)子線程與主線程的溝通,通知主線程做 UI 工作

一方面減少了每個(gè)并行任務(wù)獨(dú)自建立線程的開(kāi)銷,另一方面可以管理多個(gè)并發(fā)線程的公共資源,從而提高了多線程的效率。所以ThreadPoolExecutor比較適合一組任務(wù)的執(zhí)行。Executors利用工廠模式對(duì)ThreadPoolExecutor進(jìn)行了封裝。

Executors提供了四種創(chuàng)建ExecutorService的方法,他們的使用場(chǎng)景如下:

1. Executors.newFixedThreadPool()

創(chuàng)建一個(gè)定長(zhǎng)的線程池,每提交一個(gè)任務(wù)就創(chuàng)建一個(gè)線程,直到達(dá)到池的最大長(zhǎng)度,這時(shí)線程池會(huì)保持長(zhǎng)度不再變化。

當(dāng)線程處于空閑狀態(tài)時(shí),它們并不會(huì)被回收,除非線程池被關(guān)閉。當(dāng)所有的線程都處于活動(dòng)狀態(tài)時(shí),新任務(wù)都會(huì)處于等待狀態(tài),直到有線程空閑出來(lái)。

只有核心線程并且不會(huì)被回收,能夠更加快速的響應(yīng)外界的請(qǐng)求。

2. Executors.newCachedThreadPool()

創(chuàng)建一個(gè)可緩存的線程池,如果當(dāng)前線程池的長(zhǎng)度超過(guò)了處理的需要時(shí),它可以靈活的回收空閑的線程,當(dāng)需要增加時(shí),它可以靈活的添加新的線程,而不會(huì)對(duì)池的長(zhǎng)度作任何限制

線程數(shù)量不定的線程池,只有非核心線程,最大線程數(shù)為 Integer.MAX_VALUE。當(dāng)線程池中的線程都處于活動(dòng)狀態(tài)時(shí),線程池會(huì)創(chuàng)建新的線程來(lái)處理新任務(wù),否則利用空閑的線程來(lái)處理新任務(wù)。線程池中的空閑線程具有超時(shí)機(jī)制,為 60s。

任務(wù)隊(duì)列相當(dāng)于一個(gè)空集合,導(dǎo)致任何任務(wù)都會(huì)立即被執(zhí)行,適合執(zhí)行大量耗時(shí)較少的任務(wù)。當(dāng)整個(gè)線程池都處于限制狀態(tài)時(shí),線程池中的線程都會(huì)超時(shí)而被停止。

3. Executors.newScheduledThreadPool()

創(chuàng)建一個(gè)定長(zhǎng)的線程池,而且支持定時(shí)的以及周期性的任務(wù)執(zhí)行,類似于Timer。

非核心線程數(shù)沒(méi)有限制,并且非核心線程閑置的時(shí)候立即回收,主要用于執(zhí)行定時(shí)任務(wù)和具有固定周期的重復(fù)任務(wù)。

4. Executors.newSingleThreadExecutor()

創(chuàng)建一個(gè)單線程化的executor,它只創(chuàng)建唯一的worker線程來(lái)執(zhí)行任務(wù)

只有一個(gè)核心線程,保證所有的任務(wù)都在一個(gè)線程中順序執(zhí)行,意義在于不需要處理線程同步的問(wèn)題。

一般用于執(zhí)行后臺(tái)耗時(shí)任務(wù),當(dāng)任務(wù)執(zhí)行完成會(huì)自動(dòng)停止;同時(shí)由于它是一個(gè)服務(wù),優(yōu)先級(jí)要遠(yuǎn)遠(yuǎn)高于線程,更不容易被系統(tǒng)殺死,因此比較適合執(zhí)行一些高優(yōu)先級(jí)的后臺(tái)任務(wù)。

使用步驟:創(chuàng)建IntentService的子類,重寫(xiě)onHandleIntent方法,在onHandleIntent中執(zhí)行耗時(shí)任務(wù)

原理:在源碼實(shí)現(xiàn)上,IntentService封裝了HandlerThread和Handler。onHandleIntent方法結(jié)束后會(huì)調(diào)用IntentService的stopSelf(int startId)方法嘗試停止服務(wù)。

IntentService的內(nèi)部是通過(guò)消息的方式請(qǐng)求HandlerThread執(zhí)行任務(wù),HandlerThread內(nèi)部又是一種使用Handler的Thread,這就意味著IntentService和Looper一樣是順序執(zhí)行后臺(tái)任務(wù)的

(HandlerThread:封裝了Handler + ThreadHandlerThread適合在有需要一個(gè)工作線程(非UI線程)+任務(wù)的等待隊(duì)列的形式,優(yōu)點(diǎn)是不會(huì)有堵塞,減少了對(duì)性能的消耗,缺點(diǎn)是不能同時(shí)進(jìn)行多個(gè)任務(wù)的處理,需要等待進(jìn)行處理。處理效率低,可以當(dāng)成一個(gè)輕量級(jí)的線程池來(lái)用)

Android開(kāi)發(fā)之路-多線程

多線程作為Android開(kāi)發(fā)中相對(duì)而言較為高階的知識(shí),其中用到相關(guān)的知識(shí)點(diǎn)是非常的多,所以在我們需要進(jìn)行設(shè)計(jì)或者寫(xiě)多線程的代碼就必須要進(jìn)行相對(duì)謹(jǐn)慎的處理,這樣就由必要對(duì)其要有著比較系統(tǒng)化的認(rèn)知

我們一般將Android應(yīng)用分成為兩種:主線程和工作線程;主線程主要是用來(lái)進(jìn)行初始化UI,而工作線程主要是進(jìn)行耗時(shí)操作,例如讀取數(shù)據(jù)庫(kù),網(wǎng)絡(luò)連接等

Android系統(tǒng)是以進(jìn)程為單位來(lái)對(duì)應(yīng)用程序資源進(jìn)行限制,這個(gè)問(wèn)題的可以解釋為:一個(gè)進(jìn)程最多能夠開(kāi)幾個(gè)線程?最好能開(kāi)幾個(gè)?但實(shí)則這個(gè)是沒(méi)有上限這一說(shuō),主要是因?yàn)橘Y源的限制

Android中關(guān)于主線程的理解:Android的主線程是UI線程,在Android中,四大組件運(yùn)行在主線程中,在主線程中做耗時(shí)操作會(huì)導(dǎo)致程序出現(xiàn)卡頓甚至出現(xiàn)ANR異常,一個(gè).

在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。多線程處理一個(gè)常見(jiàn)的例子就是用戶界面。

線程總的來(lái)就是進(jìn)程的一個(gè)實(shí)體,是CPU進(jìn)行分派和調(diào)度的基本單位,擁有著比進(jìn)程更小且能夠獨(dú)立運(yùn)行的基本單位,線程本身基本上是不擁有系統(tǒng)資源,僅擁有一點(diǎn)在運(yùn)行過(guò)程中必須擁有的資源,但它可與同屬一個(gè)進(jìn)程中的其他進(jìn)程進(jìn)行共享其所擁有的所有資源

線程狀態(tài)有些地方將之分為5中狀態(tài),而且在Java Jdk中線程被其定義為6中狀態(tài),我們可以對(duì)其進(jìn)行類比

普遍定義的5中狀態(tài):新建,就緒,運(yùn)行,阻塞, 死亡

Java Jdk 定義狀態(tài)

線程阻塞是指在某一時(shí)刻的某一個(gè)線程在進(jìn)行運(yùn)行一段代碼的情況下,突然另一個(gè)線程也要進(jìn)行運(yùn)行,但在運(yùn)行過(guò)程中,那個(gè)線程執(zhí)行完全運(yùn)行之前,另一個(gè)線程是不可能獲取到CPU的執(zhí)行權(quán),就會(huì)導(dǎo)致線路阻塞的出現(xiàn)

死鎖也稱之為抱死,意思就是說(shuō)一個(gè)進(jìn)程鎖定了另外一個(gè)進(jìn)程所需要的頁(yè)或表是,但第二個(gè)進(jìn)程同時(shí)又鎖定了第一個(gè)進(jìn)程所需的一頁(yè),這樣就會(huì)出現(xiàn)死鎖現(xiàn)象

簡(jiǎn)要介紹實(shí)現(xiàn)線程的三種方式:繼承Thread,實(shí)現(xiàn)runnable,實(shí)現(xiàn)callable。這里有一點(diǎn)需要注意的是,實(shí)現(xiàn)callable是與線程池相關(guān)聯(lián)的而callable很重要的一個(gè)特性是其帶有返回值。當(dāng)我們只需實(shí)現(xiàn)單線程時(shí)實(shí)現(xiàn)runnable更加利于線程程序的拓展

在線程開(kāi)啟之前進(jìn)行調(diào)用 thread.setDaemon(true); 將thread設(shè)定成當(dāng)前線程中的守護(hù)線程 使用案例

線程讓步【yield方法】讓當(dāng)前線程釋放CPU資源,讓其他線程搶占

這種具體某個(gè)對(duì)象鎖 wait notify 方法與Condition 的 await以及signal方法類似; 全面這種方法的阻塞等待都可以是釋放鎖,而且在喚醒后,這種線程都是能夠獲取鎖資源的,而這個(gè)門(mén)栓就跟閥門(mén)類似


文章名稱:android多線程,android多線程并發(fā)實(shí)例
網(wǎng)頁(yè)路徑:http://weahome.cn/article/hocehe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部