线程阻塞和挂起(网络收集)
? 線程阻塞
線程在運行的過程中因為某些原因而發(fā)生阻塞,阻塞狀態(tài)的線程的特點是:該線程放棄CPU的使用,暫停運行,只有等到導(dǎo)致阻塞的原因消除之后才回復(fù)運行。或者是被其他的線程中斷,該線程也會退出阻塞狀態(tài),同時拋出InterruptedException。
?
一般線程中的阻塞:
? ? ? ? A、線程執(zhí)行了Thread.sleep(int millsecond);方法,當(dāng)前線程放棄CPU,睡眠一段時間,然后再恢復(fù)執(zhí)行
? ? ? ? B、線程執(zhí)行一段同步代碼,但是尚且無法獲得相關(guān)的同步鎖,只能進(jìn)入阻塞狀態(tài),等到獲取了同步鎖,才能回復(fù)執(zhí)行。
? ? ? ? C、線程執(zhí)行了一個對象的wait()方法,直接進(jìn)入阻塞狀態(tài),等待其他線程執(zhí)行notify()或者notifyAll()方法。
? ? ? ? D、線程執(zhí)行某些IO操作,因為等待相關(guān)的資源而進(jìn)入了阻塞狀態(tài)。比如說監(jiān)聽system.in,但是尚且沒有收到鍵盤的輸入,則進(jìn)入阻塞狀態(tài)。
?
?
線程掛起
線程的掛起操作實質(zhì)上就是使線程進(jìn)入"非可執(zhí)行"狀態(tài)下,在這個狀態(tài)下CPU不會分給線程時間片,進(jìn)入這個狀態(tài)可以用來暫停一個線程的運行。在線程掛起后,可以通過重新喚醒線程來使之恢復(fù)運行。
?Thread 的API中包含兩個被淘汰的方法,它們用于臨時掛起和重啟某個線程,這些方法已經(jīng)被淘汰,因為它們是不安全的,不穩(wěn)定的。如果在不合適的時候掛起線程(比如,鎖定共享資源時),此時便可能會發(fā)生死鎖條件——其他線程在等待該線程釋放鎖,但該線程卻被掛起了,便會發(fā)生死鎖。另外,在長時間計算期間掛起線程也可能導(dǎo)致問題。
線程掛起是操作系統(tǒng)底層的邏輯。線程阻塞是JAVA的邏輯。一定程度上說,JAVA中的線程阻塞(sleep 鎖等待 wait等)是通過掛起實現(xiàn)的(掛起線程是其中一種實現(xiàn)阻塞的方式,還有一種是不斷的try lock)。
轉(zhuǎn)載于:https://www.cnblogs.com/xiaolang8762400/p/7072095.html
總結(jié)
以上是生活随笔為你收集整理的线程阻塞和挂起(网络收集)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第4课第4节_Android灯光系统_源
- 下一篇: 毕业5年的感悟