線程的創(chuàng)建
name 設(shè)置現(xiàn)場(chǎng)的名字?? priority設(shè)置線程的優(yōu)先級(jí)(優(yōu)先級(jí)在0-1之間默認(rèn)是0.5 ,值越大,線程執(zhí)行的概率越高)? start()方法啟動(dòng)線程?? *要不是配置name? priority完全根據(jù)自己的需要?? 不需要的話可以忽略
t2創(chuàng)建的線程是異步的?? 不會(huì)阻塞主線程 (詳細(xì)見下文) 所以輸出的結(jié)果是t1和t2交替運(yùn)行的結(jié)果
從上文代碼中可以看到下載圖片時(shí)開啟了一個(gè)新的線程? 當(dāng)下載完成后返回到主線程配置圖片
Demo:huxiao123/NSThreadDownload · GitHub
線程的取消和退出
廢話??? 先擼代碼
可以看出線程的取消和退出完全不是一回事,取消一個(gè)線程后線程并沒有被釋放,只有調(diào)用exit()方法才會(huì)退出,釋放掉內(nèi)存争群。
當(dāng)我們想獲取一個(gè)線程的名字時(shí)可以通過[TSThread currentThread].name 來獲取線程的名字
可以通過isCancellid()方法判斷一個(gè)線程是否被取消
由于上文中使用了一個(gè)異步線程,所以打印出的結(jié)果是交替進(jìn)行,切線程B只執(zhí)行了99次就退出
線程??(這里不做詳細(xì)介紹 只是簡(jiǎn)單認(rèn)識(shí)一下? 后面會(huì)單獨(dú)拿出來總結(jié))
在一個(gè)場(chǎng)景中, 對(duì)于一個(gè)共享資源,允許多個(gè)線程同時(shí)讀取(GET),但為了保護(hù)資源的正確性,同一時(shí)刻只能有一個(gè)線程修改(SET)共享資源, 這種情況下就要使用線程??來對(duì)共享資源進(jìn)行保護(hù)和訪問限制送朱。
1.@synchronized(self){
?????????????? 要執(zhí)行的動(dòng)作
}
上面的[NSThread sleepforTimeInterval:0.01] 只是為了調(diào)試用?? 不需要的話可以取消
2.NSLock? 它通過兩個(gè)方法來進(jìn)行資源的訪問限制? 加鎖 [(NSLock *)Lock lock]? 解鎖 [_(NSLock *)Lock unlock]???? 把要執(zhí)行的動(dòng)作放在兩個(gè)方法直接就行了