国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java解惑 - sleep和wait/notify機制, 線程阻塞和等待的區別

2019-11-06 06:18:17
字體:
來源:轉載
供稿:網友

sleep()方法

sleep()方法是定義在Thread上的native方法, 在設定時間段內(精度取決于CPU)阻塞線程的執行, 但是并不更改線程的鎖持有情況.

wait/notify機制

wait()方法是定義在Object上的方法, 是java語言級的方法, 需要在同步塊或者同步方法中進行調用, 會釋放鎖, 并進入鎖對象的等待隊列, 需要等到其他線程調用notify()方法釋放鎖后(實際上該線程同步塊運行結束后才會釋放鎖), 重新競爭鎖.

總結

兩者的共同點是

都暫時停止線程的執行, 線程本身不會占用CPU時間片.區別是調用了sleep方法的線程直接受CPU調度, 而wait則是等待另外的java線程在持有同一個對象鎖的同步塊/方法中進行notify調用.

線程阻塞和等待的區別

實際上不用可以區分兩者, 因為兩者都會暫停線程的執行. 兩者的區別是: 進入waiting狀態是線程主動的, 而進入blocked狀態是被動的. 更進一步的說, 進入blocked狀態是在同步(synchronized代碼之外), 而進入waiting狀態是在同步代碼之內.

注: 以上文字引用自CSDN YidingHe的回答


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 米脂县| 晴隆县| 行唐县| 永安市| 克拉玛依市| 刚察县| 麟游县| 浦县| 夏邑县| 林西县| 英山县| 广东省| 曲靖市| 资兴市| 交口县| 呼图壁县| 宜川县| 大余县| 嵩明县| 通渭县| 会东县| 车险| 新泰市| 黔江区| 台东市| 科尔| 华蓥市| 新化县| 泰和县| 图木舒克市| 基隆市| 徐水县| 贡嘎县| 乐平市| 开远市| 桦川县| 汝南县| 铜山县| 开鲁县| 宁南县| 柳河县|