java併發程式設計的藝術 讀書筆記 01

2021-08-13 07:47:52 字數 1029 閱讀 4591

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 ...