日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件构造学习笔记-第十四周、十五周

發布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件构造学习笔记-第十四周、十五周 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

課程進入了尾聲。本周內容主要是線程安全相關。線程錯誤比一般的錯誤更加難以發現和修改,甚至加入一條print語句就能改變時間分片,從而導致錯誤消失。重點介紹了“鎖”的機制,在使用時避免對整個方法進行lock,而是對可能發生線程不安全的指令進行lock操作,以免程序性能受到明顯影響。同時避免“死鎖”現象發生,在使用多個lock時注意順序。

并發

1.并行:將程序布置在多個CPU上執行。
并發:將任務拆分為多個階段,在同一個CPU上執行(切片)。

2.并發的兩個模型:共享內存(只能用于線程)和消息傳遞(線程、進程)。

進程和線程

1.進程和線程都是并發模塊的類型。進程比較“重量級”,私有空間,彼此隔離;線程“輕量級”,是程序內部的控制機制。一個進程可以形成多個線程。
2.每個應用至少有一個線程,主線程可以創建其它的線程。
3.創建線程的方法:繼承Thread;從Runnable接口構造Thread對象。

創建線程需要調用Thread類的start方法,不能運行具體的run方法

交錯(Interleaving)和競爭

1.時間分片:雖然有多個線程,但只有一個CPU,每個時刻只能執行一個線程。通過時間分片在多個進程/線程間共享處理器。由操作系統自動調度。
2.共享內存時的競爭情況
不恰當的分片操作會導致錯誤。右側A和B發生了競爭/線程干擾。

共享內存多線程的運行結果實例,每條語句可劃分為讀取-計算-寫回三個原子操作

3.消息傳遞時的競爭情況
由于時間分片,消息傳遞機制也無法解決競爭問題。
4.調用方法主動影響交錯現象
①Thread.sleep(time) 線程休眠time毫秒
②Thread.interrupt() 向線程發出中斷信號,例如t.interrupt(),即在其它線程里向t發出中斷信號。收到中斷信號后t不一定中斷,由t本身決定。正常運行期間,即使收到中斷信號也不會理會;在休眠時收到中斷信號則拋出異常。

③Thread.join() 讓線程保持執行,直到其執行結束。執行該操作時,也會檢測其它線程發來的中斷信號。

t1收到中斷信號時,如果一次循環都未執行,則先輸入if再輸出else;如果執行一次,則先輸出else再輸出if;如果已經進行兩次循環則輸出兩個else。此外t1和t2的start執行先后不定。

保證線程安全的策略

1.Confinement
要求類中方法不能訪問屬性(過于嚴格)。
2.Immutability
使用不可變數據類型和不可變引用,避免多個線程之間的競爭。如果是有益可變性,則需要通過“加鎖”保證線程安全。
3.使用線程安全數據類型
如果必須使用mutable數據類型在多個線程之間共享數據,要使用線程安全的數據類型。一般來說JDK為ADT額外提供一個線程安全的類,但性能受影響。List、Map、Set都是線程不安全的,API提供集合類的包裝,對每個操作都以原子操作進行。執行其上的某個操作是線程安全的,但如果多個操作放在一起,仍然不安全。//即使在線程安全的集合類上,使用iterator也是不安全的。除非使用lock機制。


4.鎖和同步

①程序員負責多線程之間對mutable數據的共享操作,通過同步策略避免多個線程同時訪問數據。使用鎖機制,獲得對數據的獨家更改權,其它線程的訪問被阻塞。
②Lock是Java的內嵌機制,每個對象都有相關聯的lock。

③Lock用以保護共享數據。要實現互斥,則必須使用同一個lock進行保護。
④構造方法默認互斥,不需加鎖。除非必要,否則不加鎖;如果使用,要盡量縮小范圍。因為會給性能帶來極大影響。
⑤對靜態方法進行加鎖,會同時鎖住類的所有對象。
⑥1和4正確。A獲得了list的鎖并不意味著其它對象不能獲取/改變list的元素。對同一個mutable對象的操作,必須在各線程里用synchronized全部保護起來。對于該例子即是將B的兩條語句鎖住。
⑦3和4需要鎖住。
⑧使用lock的條件:任何共享的mutable變量/對象在被讀/寫的時候必須加鎖。涉及到多個mutable變量的時候,它們必須被同一個lock保護(例如開始和結束時間)。

死鎖

1.多個線程競爭lock,相互等待對方釋放lock(必須滿足多個線程使用多個鎖、訪問順序不同)。
2.避免方法:多個線程使用同一順序的lock;用單個lock保護多個對象(粗粒度)。

wait(), notify(), notifyAll()

都是object類的方法。需要在synchronized塊中調用,要求調用對象和lock的對象相同。

o.wait(): 釋放o的鎖(阻塞當前線程),進入到o的等待隊列中。
o.notify(): 喚醒等待隊列的一個線程。
o.notifyAll(): 喚醒等待隊列的所有線程。

總結

以上是生活随笔為你收集整理的软件构造学习笔记-第十四周、十五周的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 东方av在线免费观看 | 日韩专区欧美专区 | 肉肉视频在线观看 | 亚洲春色在线 | 国产伦精品一区二区三区高清版 | 9l视频自拍九色9l视频 | 日本网站黄色 | 国产四区 | 亚洲精品乱码久久久久久蜜桃动漫 | 亚洲视频网站在线观看 | 亚洲一区二区三区国产 | 永久福利视频 | 强开小受嫩苞第一次免费视频 | 五月婷婷综合在线观看 | 丰满肥臀噗嗤啊x99av | 国产美女精品在线 | 欧美综合成人 | 国产精品日韩专区 | 国偷自拍 | 亚洲蜜桃视频 | 五月六月丁香 | 欧美另类z0zx974 | 视频在线观看免费大片 | 开心激情婷婷 | 黑人中文字幕一区二区三区 | 色多多视频污 | 亚洲激情视频在线观看 | 欧美日韩性生活视频 | 日本伊人久久 | 日本女人毛茸茸 | 麻豆免费av| 在线播放91灌醉迷j高跟美女 | 亚洲av无码一区二区三区观看 | 奶水旺盛的女人伦理 | 亚洲涩涩网站 | 色婷婷色 | 草草地址线路①屁屁影院成人 | 成人午夜视频免费看 | 国产亚洲精品av | 91在线资源 | 在线视频福利 | 亚洲最新网址 | 亚洲精品一二三四区 | 国产激情视频在线 | 亚洲国产精品自拍 | 超碰在线播放97 | 欧美午夜精品一区二区三区 | 视频在线观看网站免费 | www.xxx.日本| 亚洲日本va中文字幕 | 91操人| 亚洲一区二区偷拍 | 亚洲第一a | 国产乡下妇女做爰 | 男女h网站 | 亚洲综合激情另类小说区 | 非洲黑人狂躁日本妞 | 涩涩视频网站在线观看 | 91n视频 | 日韩欧美精品中文字幕 | 日韩黄色在线播放 | 一本加勒比hezyo黑人 | 黄色成人免费观看 | 亚洲国产成人精品女人 | av资源首页| 国产在线天堂 | 国产影音先锋 | 在线a免费| 激情久久av一区av二区av三区 | 狂野欧美性猛交xxⅹ李丽珍 | 午夜精品国产精品大乳美女 | 中文字幕 欧美 日韩 | 成年人免费在线观看 | 亚洲精品影院 | 色一情一乱一伦 | 日韩在线一二三区 | 欧美乱大交xxxxx春色视频 | 黄色三级视频在线观看 | 99久热在线精品996热是什么 | 欧美jizz欧美性大全 | 亚洲伦理影院 | 亚洲av无码乱码国产精品久久 | 日韩欧美一区二区视频 | 亚洲国产永久 | 亚洲国产精品一区二区三区 | 人人妻人人澡人人爽人人欧美一区 | 国产suv精品一区二区四 | 亚洲美女性视频 | www.chengren| 午夜久久久久久久久久 | 日本美女一级视频 | 成人黄色电影在线 | www日本免费| 91免费看片 | 亚洲精品久久久久久无码色欲四季 | 日本在线视频播放 | 国产亚洲精品久久777777 | 免费在线不卡视频 | 九九热这里只有精品6 |