Java併發(八)----使用線程避免cpu佔用100%

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();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章