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

正文內(nèi)容

03講_線程進(jìn)程安全-免費(fèi)閱讀

  

【正文】 2023年 1月 22日星期日 下午 1時(shí) 19分 21秒 13:19: ? 1最具挑戰(zhàn)性的挑戰(zhàn)莫過(guò)于提升自我。 2023年 1月 22日星期日 1時(shí) 19分 21秒 13:19:2122 January 2023 ? 1空山新雨后,天氣晚來(lái)秋。 , January 22, 2023 ? 很多事情努力了未必有結(jié)果,但是不努力卻什么改變也沒有。 :19:2113:19Jan2322Jan23 ? 1故人江海別,幾度隔山川。 5:舉例說(shuō)明進(jìn)程安全和線程安全問題所考慮的問題的不同之處? 6: Oracle數(shù)據(jù)庫(kù)中,多個(gè)用戶訪問同一數(shù)據(jù),可能會(huì)造成死鎖,請(qǐng)你設(shè)計(jì)一個(gè)案例,進(jìn)行測(cè)試。 小結(jié) 本章主要針對(duì)線程和進(jìn)程開發(fā)過(guò)程中的安全問題進(jìn)行講述。在進(jìn)程概念中,每一個(gè)進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨(dú)立的。 解決方案 解決該問題,常見的方法有如下幾種: 1:當(dāng)需要暫停時(shí),干脆讓線程的 run()方法結(jié)束運(yùn)行以釋放資源 (實(shí)際上就是讓該線程永久結(jié)束 );繼續(xù)時(shí),新開辟一個(gè)線程繼續(xù)工作。 案例分析 如前所述,線程的暫停和繼續(xù),早期采用 suspend()和 resume()方法,但是容易發(fā)生死鎖。 ? 資源池耗盡死鎖。 提示: 關(guān)于死鎖的檢測(cè)與解除,有很多重要算法,如資源分配算法、銀行家算法等。一般情況下,我們主要是針對(duì)死鎖產(chǎn)生的四個(gè)必要條件來(lái)進(jìn)行破壞,用以避免和預(yù)防死鎖。 觀察 run()函數(shù)中的代碼,當(dāng) th1運(yùn)行后,進(jìn)入代碼段 1,鎖定了 S1,如果此時(shí) th2運(yùn)行,搶占 CPU,進(jìn)入代碼段 3,鎖定 S2,那么 th1就無(wú)法運(yùn)行代碼段 2,但是又沒有釋放 S1,此時(shí), th2也就不能運(yùn)行代碼段 4。 這四個(gè)條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會(huì)發(fā)生死鎖。 見代碼 運(yùn)行正常。該程序的安全隱患在哪里呢? 觀察 cal()函數(shù)中的代碼,當(dāng)線程 th1運(yùn)行后,線程 th2運(yùn)行,此時(shí),線程 th2隨時(shí)可能搶占 CPU,而不一定要等線程 th1運(yùn)行完畢。如一個(gè)工作需要若干個(gè)步驟,各個(gè)步驟都比較耗時(shí),不能因?yàn)樗鼈兊倪\(yùn)行,影響程序的運(yùn)行效果,最好的方法就是將各步用線程實(shí)現(xiàn)。 但是可以看出,該代碼實(shí)際上運(yùn)行較慢,因?yàn)橐粋€(gè)線程的運(yùn)行,必須等待另一個(gè)線程將同步代碼段運(yùn)行完畢。 synchronized(同步鎖對(duì)象 ) { // 訪問共享資源,需要同步的代碼段 } 因此,在上面的案例中,可以將將賣票的代碼用synchronized代碼塊包圍起來(lái),“同步鎖對(duì)象”取 this。這種設(shè)計(jì)理論上當(dāng)然也是可行,但由于線程同步的情況并不是很普遍,僅僅為了這種小概率事件,在所有對(duì)象內(nèi)部都開辟另一個(gè)成員空間,帶來(lái)極大的空間浪費(fèi),增加了編程難度,所以,一般不采用這種方法。 更為嚴(yán)重的是,該問題的出現(xiàn)很具有隨機(jī)性。 代碼如 。但是在多個(gè)線程在運(yùn)行時(shí)共享數(shù)據(jù)的情況下,就需考慮其他線程的狀態(tài)和行為,否則就不能保證程序的運(yùn)行結(jié)果的正確性。 3:運(yùn)行中狀態(tài):占有 CPU,執(zhí)行線程的 run()方法。 ()。 以上代碼如果用線程來(lái)進(jìn)行開發(fā),在 Java語(yǔ)言里面,就可以用如 (其他語(yǔ)言類似 ) 。但是,我們發(fā)現(xiàn),打印函數(shù)中的 while循環(huán)是個(gè)死循環(huán),也就是說(shuō),這個(gè)死循環(huán)不運(yùn)行完畢,程序?qū)⒉荒茏髌渌虑椤? 線程機(jī)制 為什么需要線程 由于 Java在線程操作方面具有較好的面向?qū)ο筇匦?,也具有一定的代表性本章基?Java語(yǔ)言進(jìn)行講解。進(jìn)程是操作系統(tǒng)進(jìn)行資源分配的單位,通俗地講,是一個(gè)正在執(zhí)行的程序。 線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。實(shí)際上,多線程最直觀的說(shuō)法是:讓應(yīng)用程序看起來(lái)好像同時(shí)能做好幾件事情。比如,程序中的代碼行 1永遠(yuǎn)也無(wú)法運(yùn)行。 運(yùn)行,就會(huì)發(fā)現(xiàn),此時(shí)“打印歡迎信息”和“其他工作”就“同時(shí)”做了。 一個(gè)線程有從創(chuàng)建、運(yùn)行到消亡的過(guò)程,稱為線程的生命周期。 4:阻塞狀態(tài):運(yùn)行的線程因某種原因停止繼續(xù)運(yùn)行。在某些項(xiàng)目中,經(jīng)常會(huì)出現(xiàn)線程同步的問題,即:多個(gè)線程在訪問同一資源時(shí),會(huì)出現(xiàn)安全問題。 運(yùn)行,控制臺(tái)打印如下: 這段程序貌似沒有問題。比如,有些項(xiàng)目在實(shí)驗(yàn)室運(yùn)行階段沒有問題,因?yàn)槟膫€(gè)線程搶占 CPU,是由操作系統(tǒng)決定的,用戶并沒有權(quán)利干涉,也無(wú)法預(yù)測(cè),所以,項(xiàng)目可能在商業(yè)運(yùn)行階段出現(xiàn)了問題,等到維護(hù)人員去查問題的時(shí)候,由于問題出現(xiàn)的隨機(jī)性,問題可能就不出現(xiàn)了?,F(xiàn)代的編程語(yǔ)言的設(shè)計(jì)思路都是把同步標(biāo)識(shí)加在代碼段上,確切的說(shuō),是把同步標(biāo)識(shí)放在“ 訪問共享資源(如賣票)的代碼段”上。 如代碼 。因此,從性能上講,線程同步是非常耗費(fèi)資源的一種操作。但是,由于線程隨時(shí)都有可能搶占 CPU,可能在前面一個(gè)步驟沒有完成時(shí),后面的步驟線程就已經(jīng)運(yùn)行,該安全隱患造成系統(tǒng)得不到正確結(jié)果。當(dāng)然,在上面的例子中,可能因?yàn)榫€程 th1運(yùn)行較快,th2在它運(yùn)行的過(guò)程中沒有搶占 CPU,“碰巧”得到了正確結(jié)果,但是如果讓線程 th2搶占 CPU,這樣,系統(tǒng)可能得不到正確結(jié)果。實(shí)際上,該程序相當(dāng)于摒棄了“線程就是為了程序看起來(lái)同時(shí)做好幾件事情”的思想,將并發(fā)程序又變成了順序的,如果線程 th1沒有運(yùn)行完畢的話,程序會(huì)在 ()處堵塞。 案例分析 以 Java語(yǔ)言為例,死鎖一般來(lái)源于代碼段的同步,當(dāng)一段同步代碼被某線程運(yùn)行時(shí),其他線程可能進(jìn)入堵塞狀態(tài) (無(wú)法搶占 CPU),而剛好在該
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1