您好,登錄后才能下訂單哦!
這篇文章主要講解了“python中sleep()和wait()有什么區別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python中sleep()和wait()有什么區別”吧!
sleep 是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時后會自動恢復。調用 sleep 不會釋放對象鎖。 wait 是 Object 類的方法,對此對象調用 wait 方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出 notify 方法(或 notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
sleep 就是正在執行的線程主動讓出 cpu,cpu 去執行其他線程,在 sleep 指定的時間過后,cpu 才會回到這個線程上繼續往下執行,如果當前線程進入了同步鎖,sleep 方法并不會釋放鎖,即使當前線程使用 sleep 方法讓出了 cpu,但其他被同步鎖擋住了的線程也無法得到執行。wait 是指在一個已經進入了同步鎖的線程內,讓自己暫時讓出同步鎖,以便其他正在等待此鎖的線程可以得到同步鎖并運行,只有其他線程調用了 notify 方法(notify 并不釋放鎖,只是告訴調用過 wait 方法的線程可以去參與獲得鎖的競爭了,但不是馬上得到鎖,因為鎖還在別人手里,別人還沒釋放。如果 notify 方法后面的代碼還有很多,需要這些代碼執行完后才會釋放鎖,可以在 notfiy 方法后增加一個等待和一些代碼,看看效果),調用 wait方法的線程就會解除 wait 狀態和程序可以再次得到鎖后繼續向下運行。對于 wait 的講解一定要配合例子代碼來說明,才顯得自己真明白。
package com.huawei.interview; publicclass MultiThread { /** * @paramargs */ public static voidmain(String[] args) { // TODO Auto-generated method stub new Thread(newThread1()).start(); try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catchblock e.printStackTrace(); } new Thread(newThread2()).start(); } private static classThread1implements Runnable { @Override public void run() { // TODO Auto-generated methodstub //由于這里的 Thread1和下面的 Thread2內部 run 方法要用同一對象作為監視器,我們這里不能用 this,因Thread2里面的 this 和這個 Thread1的 this 不是同一個對象。我們用MultiThread.class 這個字節碼對象,當前虛擬機里引用這個變量時,指向的都是同一個對象。 synchronized (MultiThread.class){ System.out.println("enterthread1..."); System.out.println("thread1is waiting"); try { //釋放鎖有兩種方式,第一種方式是程序自然離開監視器的范圍,也就是離開了 synchronized 關鍵字管轄的代碼范圍,另一種方式就是在 synchronized 關鍵字管轄的代碼內部調用監視器對象的 wait 方法。這里,使用 wait 方法釋放鎖。 MultiThread.class.wait(); } catch(InterruptedException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } System.out.println("thread1is going on..."); System.out.println("thread1is being over!"); } } } private static classThread2implements Runnable { @Override public void run() { // TODO Auto-generated methodstub synchronized (MultiThread.class){ System.out.println("enterthread2..."); System.out.println("thread2notify other thread can release wait status.."); //由于 notify 方法并不釋放鎖,即使 thread2調用下面的 sleep 方法休息了10毫秒,但 thread1仍然不會執行,因為 thread2沒有釋放鎖,所以 Thread1無法得不到鎖。 MultiThread.class.notify(); System.out.println("thread2is sleeping ten millisecond..."); try { Thread.sleep(10); } catch (InterruptedExceptione) { // TODO Auto-generatedcatch block e.printStackTrace(); } System.out.println("thread2is going on..."); System.out.println("thread2is being over!"); } } } }
感謝各位的閱讀,以上就是“python中sleep()和wait()有什么區別”的內容了,經過本文的學習后,相信大家對python中sleep()和wait()有什么區別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。