1、sleep 實現
在沒有利用 cpu 來計算時,不要讓 while(true) 空轉浪費 cpu,這時可以使用 yield 或 sleep 來讓出 cpu 的使用權給其他程序
while(true) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
-
可以用 wait 或 條件變量達到類似的效果
-
不同的是,後兩種都需要加鎖,並且需要相應的喚醒操作,一般適用於要進行同步的場景
-
sleep 適用於無需鎖同步的場景
2、wait 實現
synchronized(鎖對象) {
while(條件不滿足) {
try {
鎖對象.wait();
} catch(InterruptedException e) {
e.printStackTrace();
}
}
// do sth...
}
3、條件變量實現
lock.lock();
try {
while(條件不滿足) {
try {
條件變量.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// do sth...
} finally {
lock.unlock();
}