執行緒等待兩種方法的喚醒的效率比較

abaddoncoder發表於2015-04-19
一直認為無鎖比有鎖快,效能更高,可是以下這個執行緒等待測試結果,卻跟自己想得不一樣:

public class CallResult {
    private volatile boolean  noFinish = true;

    public boolean isNoFinish() {
        return commandIsFinish;
    }

    public void setNoFinish(boolean noFinish) {
        this.noFinish= noFinish;
    }

}

CallResult  callResult = new CallResult();
// .... 把callResult放到佇列,讓佇列另一端的執行緒去處理

/* 1. 無鎖等待方式,等待佇列另一端的執行緒把isNoFinish設值為false */
while(callResult.isNoFinish) { 
    Thread.yield();
}

/* 2. 鎖等待方式, 等待佇列另一端的執行緒notify().  測試結果這種方式效能更高*/
synchronized (callResult) {
    try {
             callResult.wait();
     } catch (InterruptedException e) {
            e.printStackTrace();
     }
}

<p class="indent">


針對以上測試結果,想看看各位道友的看法

[該貼被abaddoncoder於2015-04-19 14:12修改過]

相關文章