1.1.1 多執行緒一定快嗎?
下面**並行一定比序列執行的快嗎?
public
class concurrencytest
private
static
void
concurrency() throws interruptedexception
}});
//啟動執行緒
thread.start();
int b = 0;
for (long i = 0; i < count; i++)
//執行緒阻塞
thread.join();
liong time = system.currenttimemillis() - start;
system.out.println("concurrency :" + time+"ms,b="+b);
}private
static
void
serial()
int b = 0;
for (long i = 0; i < count; i++)
liong time = system.currenttimemillis() - start;
system.out.println("serial :" + time+"ms,b="+b+",a="+a);
}}
測試結果表明:
迴圈次數 | 序列執行耗時/ms|併發執行耗時|併發比序列快多少
1億 | 130 | 77 | 約一倍
1千萬 | 18 | 9 | 約一倍
1百萬 | 5 | 5 | 差不多
10萬 | 4 | 3 | 差不多
1萬 | 0 | 1 | 慢
為什麼當併發執行累加操作不超過百萬次時,數度會比序列慢。這是因為執行緒有建立和上下文切換的開銷。
1.1.2 測試下下問切換次數和時長
*使用lmbench3測上下文切換時長
*使用vmstat測上下文切換次數
讀書筆記 java併發程式設計的藝術3 4章
可見性 對乙個volatile變數的讀,總是能看到 任意執行緒 對這個volatile變數最後的寫入。原子性 如果是多個volatile操作或類似於volatile 這種復合操作,整體上不具有原子性 當第二個操作是volatile寫時,不管第乙個操作是什麼,都不能重排序。這個規則確保volatile...
Java併發 JAVA併發程式設計實戰 讀書筆記3
發布乙個物件的意思是使它能夠被當前範圍之外的 所使用。比如將乙個引用儲存到其他 可以訪問的地方,在乙個非私有的方法中返回這個引用。在很多情況下,我們需要確保物件及它們的內部狀態不被暴露。乙個物件在尚未準備好時就將它發布,稱作逸出。最常見的發布物件的方式就是將物件的引用儲存到公共靜態域中,任何類和執行...
Java併發 JAVA併發程式設計實戰 讀書筆記8
為計算結果建立高效 可伸縮的快取記憶體 public inte ce computable public class expensivefunction implements computable public class memoizer1implements computable public ...