線程阻塞的解決方法 JS單線程,如何避免阻塞?
JS單線程,如何避免阻塞?阻塞是指暫停線程的執(zhí)行以等待條件發(fā)生(如資源準備就緒)。JS單線程可以避免阻塞。方法:1。Sleep()方法:Sleep()允許您指定一個以毫秒為單位的時間段作為參數(shù),這樣線
JS單線程,如何避免阻塞?
阻塞是指暫停線程的執(zhí)行以等待條件發(fā)生(如資源準備就緒)。JS單線程可以避免阻塞。方法:1。Sleep()方法:Sleep()允許您指定一個以毫秒為單位的時間段作為參數(shù),這樣線程就可以在指定的時間內(nèi)進入阻塞狀態(tài),而無法獲得CPU時間。一旦過了指定的時間,線程將重新啟動并進入可執(zhí)行狀態(tài)。通常,sleep()用于等待資源準備就緒:在測試發(fā)現(xiàn)不滿足條件后,讓線程阻塞一段時間,然后重新測試,直到滿足條件為止。
2. Suspend()和resume()方法:這兩個方法一起使用。Suspend()使線程進入阻塞狀態(tài),不會自動恢復。必須調(diào)用相應(yīng)的resume(),使線程再次進入可執(zhí)行狀態(tài)。Suspend()和resume()用于等待另一個線程生成的結(jié)果:在測試發(fā)現(xiàn)結(jié)果尚未生成后,讓線程阻塞。在另一個線程生成結(jié)果后,調(diào)用resume()來恢復它。
3. Yield()方法:Yield()使線程放棄當前的CPU時間,但不阻塞線程,即線程仍處于可執(zhí)行狀態(tài),隨時可能再次獲得CPU時間。調(diào)用yield()的效果相當于調(diào)度程序認為線程已經(jīng)執(zhí)行了足夠的時間,可以轉(zhuǎn)到另一個線程。
4. Wait()和notify()方法:這兩個方法一起使用。Wait()使線程進入阻塞狀態(tài)。有兩種形式:一種是允許指定以毫秒為單位的時間段作為參數(shù),另一種是無參數(shù)。前者允許線程在調(diào)用相應(yīng)的notify()或超過指定時間時重新進入可執(zhí)行狀態(tài),而后者則要求調(diào)用相應(yīng)的notify()。