freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

03講_線程進(jìn)程安全(專業(yè)版)

2025-02-01 07:20上一頁面

下一頁面
  

【正文】 :19:2113:19Jan2322Jan23 ? 1越是無能的人,越喜歡挑剔別人的錯兒。 。 2:線程 1首先用 Pen寫字,然后用 Pencil寫字;線程 2首先用 Pencil寫字,然后用 Pen寫字;編寫一個因?yàn)榫€程 1等待 Pencil,線程 2等待 Pen而造成死鎖的例子,并提出解決方法。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個 notify()重新啟動線程。本節(jié)以Java語言為例,講解線程控制中的一些安全問題。 解決死鎖沒有簡單的方法,這是因?yàn)榫€程產(chǎn)生死鎖都各有各的原因,而且往往具有很高的負(fù)載。這個“ 等候鏈”如果進(jìn)入封閉狀態(tài),也就是說,最后那個對象等候的是第一個對象,此時,所有線程都會陷入無休止的相互等待狀態(tài),造成死鎖。 那為什么 sum得到的結(jié)果為 1呢?很明顯,線程 th1的 start函數(shù)運(yùn)行時,相當(dāng)于讓求和過程以多線程形式運(yùn)行,在它“休眠”之際, th2就搶占了 CPU,在求和還沒開始做或只完成一部分時就打印 sum,導(dǎo)致得到不正常結(jié)果。 不過,值得一提的是,如果不能確定整個函數(shù)都需要同步,那就要盡量避免直接把 synchronized加在函數(shù)定義上的做法。不能是一個局部變量。當(dāng)然,上面的程序中,沒有給線程 2以買票的機(jī)會,實(shí)際上票都由線程 1賣出,我們看不出其中的問題。一般說來,線程的安全性來源于兩個方面: 1:多個線程之間可能會共享進(jìn)程的內(nèi)存資源。從上節(jié)的程序可以看出,代碼行: 實(shí)際上相當(dāng)于實(shí)例化一個新的線程對象,并運(yùn)行該線程中的 run()函數(shù)。代碼如下所示: public class P03_01 { public static void main(String[] args) { while(true) { (Wele)。第三章 線程 /進(jìn)程安全 進(jìn)程和線程是兩個范圍不同的概念。 try { (1000)。該線程的運(yùn)行并不影響主線程向下執(zhí)行,這是為什么呢? 這是由于多線程的機(jī)制實(shí)際上相當(dāng)于 CPU交替分配給不同的代碼段來運(yùn)行:也就是說,某一個時間片,某線程運(yùn)行,下一個時間片,另一個線程運(yùn)行,各個線程都有搶占 CPU的權(quán)利,至于決定哪個線程搶占,是操作系統(tǒng)需要考慮的事情。 2: CPU的某個時間片分配給哪個線程使用,默認(rèn)情況下無法由用戶控制。為了讓大家看清這個問題,我們模擬線程 1和線程 2交替賣票的情況。 其原理為:當(dāng)某一線程運(yùn)行同步代碼段時,在“同步鎖對象”上置一標(biāo)記,運(yùn)行完這段代碼,標(biāo)記消除。如前所述,要控制同步粒度,同步的代碼段越小越好,synchronized控制的范圍越小越好,否則造成不必要的系統(tǒng)開銷。 解決方案 怎樣解決?顯而易見,方法是:在運(yùn)行一個線程時,命令其他線程等待該線程運(yùn)行完畢,才能搶占 CPU進(jìn)行運(yùn)行。盡管這種情況并非經(jīng)常出現(xiàn),但一旦碰到,程序的調(diào)試將變得異常艱難。從技術(shù)上講,可以用如下方法來進(jìn)行死鎖排除: ? 可以撤消陷于死鎖的全部線程。 Java中提供了對線程生命周期進(jìn)行控制的函數(shù): ? stop():停止線程; ? suspend():暫停線程的運(yùn)行; ? resume():繼續(xù)線程的運(yùn)行: ? destroy():讓線程銷毀;等等。 3:不推薦使用 stop()來終止阻塞的線程,而應(yīng)換用由Thread提供的 interrupt()方法,以便中止并退出堵塞的代碼。 3:兩個線程,向空間有限的數(shù)組中寫數(shù)據(jù)。 2023年 1月 下午 1時 19分 :19January 22, 2023 ? 1行動出成果,工作出財富。 13:19:2113:19:2113:19Sunday, January 22, 2023 ? 1知人者智,自知者明。 13:19:2113:19:2113:191/22/2023 1:19:21 PM ? 1越是沒有本領(lǐng)的就越加自命不凡。 2023年 1月 22日星期日 下午 1時 19分 21秒 13:19: ? 1比不了得就不比,得不到的就不要。 練習(xí) 1:將 。若標(biāo)志指出線程應(yīng)該掛起,便用 wait()命其進(jìn)入等待狀態(tài)。 線程控制安全 安全隱患 ? 線程控制主要是對線程生命周期的一些操作,如暫停、繼續(xù)、消亡等。但可以通過 java thread dump來進(jìn)行判斷:一般情況下,當(dāng)死鎖發(fā)生時, Java虛擬機(jī)處于掛起狀態(tài), thread dump可以給出靜態(tài)穩(wěn)定的信息,從操作系統(tǒng)上觀察,虛擬機(jī)的 CPU占用率為零,這時可以收集 thread dump,查找 waiting for monitor entry的線程,如果大量thread都在等待給同一個地址上鎖,說明很可能死鎖發(fā)生了。如果出現(xiàn)一種極端情況,一個線程等候另一個對象,而另一個對象又在等候下一個對象,以此類推。運(yùn)行,控制臺打印如下: 很顯然,這個結(jié)果不是我們所需要的。 實(shí)際上,在 Java內(nèi),還可以直接把 synchronized關(guān)鍵字直接加在函數(shù)的定義上,這也是一種可以推薦的方法。這里以 Java語言為例,在 Java語言中, synchronized關(guān)鍵字可以解決這個問題,整個語法形式表現(xiàn)為: 注意, synchronized后的“同步鎖對象”,必須是可以被各個線程共享的,如 this、某個全局標(biāo)量等。 觀察程序中的代碼行 1處的注釋,當(dāng)只剩下一張票時,線程 1賣出了最后一張票,接著要運(yùn)行 ticketNum,但在 ticketNum還沒來得及運(yùn)行的時候,線程 2有可能搶占
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1