Java中的Park和Wait都是線程同步的機制,它們都能夠暫停線程的執行,等待某些條件的滿足。但是,它們之間也存在著一些區別。
public class ParkExample { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(() ->{ System.out.println("Thread1 has started."); LockSupport.park();//阻塞當前線程 System.out.println("Thread1 has ended."); }); t1.start(); Thread.sleep(1000); System.out.println("Main thread is unparking thread1"); LockSupport.unpark(t1);//喚醒t1 } }
Park()函數可以暫停一個線程的執行,并使其進入waiting狀態,等待其他線程喚醒它。線程進入waiting狀態后不會占用CPU時間片,因此可以減少CPU的占用率。
public class WaitExample { public static void main(String[] args) { Object lock = new Object(); Thread t1 = new Thread(() ->{ synchronized (lock) { try { System.out.println("Thread1 has started."); lock.wait();//等待喚醒 System.out.println("Thread1 has ended."); } catch (InterruptedException e) { e.printStackTrace(); } } }); t1.start(); Thread.sleep(1000); synchronized (lock) { lock.notifyAll();//通知所有等待線程 } } }
Wait()方法也可以暫停一個線程的運行,不過它將釋放對象鎖,讓其他線程可以在該對象上wait(),并且只有通過notify()、notifyAll()方法或被其他線程interrupt()操作才能喚醒等待線程。
總的來說,Park更適合用于多線程間的協調;而wait則更適合用于線程間的通信。
上一篇java json創建
下一篇vue支持原生js