在Java編程中,很多時候需要使用線程來實現并發操作。在線程的操作中,sleep和wait是兩個非常重要的方法,但它們有各自不同的用途。
public class SleepDemo { public static void main(String[] args) { Thread thread = new Thread(() ->{ for (int i = 0; i< 5; i++) { System.out.println("Sleeping..."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }); thread.start(); } }
sleep方法是Thread類中的一個靜態方法,可以使當前線程暫停執行一段時間,以便其他線程有機會執行。sleep方法的參數是毫秒值,也就是線程休眠時間的長度。
public class WaitDemo { private final Object lock = new Object(); public void waitMethod() { synchronized (lock) { System.out.println("Before wait"); try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("After wait"); } } public static void main(String[] args) { WaitDemo demo = new WaitDemo(); new Thread(() ->demo.waitMethod()).start(); synchronized (demo.lock) { demo.lock.notify(); } } }
wait方法也是Thread類中的一個方法,它會暫停當前線程的執行,并釋放由該對象鎖保護的對象的所有同步資源。調用wait方法的線程必須擁有調用對象的鎖。線程進入到等待的狀態,直到其他線程調用該對象上的notify或notifyAll方法喚醒該線程。
綜上所述,sleep方法是使當前線程暫停執行一段時間,wait方法會暫停當前線程的執行并釋放對象鎖,等待其他線程的喚醒。