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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

多线程基础-常用线程方法(三)

發布時間:2024/2/28 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程基础-常用线程方法(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.notify和wait方法

為什么notify,wait方法在Object中?

Monitor內置于每一個Object對象中,是一個同步工具,相當于操作系統中的互斥量,即值為1 的信號量。也可以稱作是對象的同步鎖。

notify(), wait()依賴于“同步鎖”,并且每個對象有且僅有一個!這就是為什么notify(), wait()等函數定義在Object類,而不是Thread類中的原因。

Object類中關于等待/喚醒的API詳細信息:

  • notify() – 喚醒在此對象監視器上等待的單個線程。
  • notifyAll() – 喚醒在此對象監視器上等待的所有線程。
  • wait() – 讓當前線程處于“等待(阻塞)狀態”,“直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法”,當前線程被喚醒(進入“就緒狀態”)。
  • wait(long timeout) – 讓當前線程處于“等待(阻塞)狀態”,“直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量”,當前線程被喚醒(進入“就緒狀態”)。
  • wait(long timeout, int nanos) – 讓當前線程處于“等待(阻塞)狀態”,“直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法,或者其他某個線程中斷當前線程,或者已超過某個實際時間量”,當前線程被喚醒進入“就緒狀態”。

    需要注意的地方是,如果在一個地方用了某個對象的wait方法,必須要在另一個線程中使用notify來把它喚醒。

2.線程讓步方法yield

1) wait()是讓線程由“運行狀態”進入到“等待(阻塞)狀態”,而yield()是讓線程由“運行狀態”進入到“就緒狀態”。

2) wait()是會線程釋放它所持有對象的同步鎖,而yield()方法不會釋放鎖。

3)yield()雖然可以讓線程由“運行狀態”進入就緒狀態,但是不一定會讓其他線程獲取cpu的執行權。

3.線程休眠方法Sleep

sleep() 的作用是讓當前線程休眠,即當前線程會從“運行狀態”進入到“休眠(阻塞)狀態”。sleep()會指定休眠時間,線程休眠的時間會大于/等于該休眠時間;在線程重新被喚醒時,它會由“阻塞狀態”變成“就緒狀態”,從而等待cpu的調度執行。

wait()會釋放對象的同步鎖,而sleep()則不會釋放鎖。

4.join方法

join() 定義在Thread.java中
join() 的作用:讓“主線程”等待“子線程”結束之后才能繼續運行

join方法和wait方法的區別是喚醒的方式不同,wait通常要notify喚醒,join要等待調用join函數的線程對象執行完線程之后執行。

5.線程終止方法Interrupt

Thread.interrupt()方法不會中斷一個正在運行的線程。它的作用是,在線程受到阻塞時拋出一個中斷信號,這樣線程就得以退出阻塞的狀態。更確切的說,如果線程被Object.wait, Thread.join和Thread.sleep三種方法之一阻塞,那么,它將接收到一個中斷異常(InterruptedException),從而提早地終結被阻塞狀態。

6.線程優先級和守護線程

java 中的線程優先級的范圍是1~10,默認的優先級是5。“高優先級線程”會優先于“低優先級線程”執行。

用戶線程執行用戶級任務,而守護線程也就是“后臺線程”,一般用來執行后臺任務。需要注意的是:Java虛擬機在“用戶線程”都結束后會后退出。

總結

以上是生活随笔為你收集整理的多线程基础-常用线程方法(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

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