進程是計算機的最小資源分配單位,線程是最小的CPU調度單位
Java支持多線程,java.lang.Thread。用戶可以輕鬆地使用多線程。
多線程的好處有
1. 充分利用多核處理器的能力
2. 一個線程阻塞時其他線程可以繼續工作,提高資源利用率
3. 簡化編程模型,一個線程代表一個任務,從開始到結束。
4. 能夠實現異步處理
多線程帶來的困難
1. 線程間共享內存區,帶來race-condition問題
2. 多線程編程需要較高的技巧和經驗,測試較爲困難
3. 不良的多線程代碼可能帶來死鎖、飢餓等性能問題
當狀態是可變的,多個線程可以同時讀寫時,如果沒有進行有效的鎖保護,那麼就可能產生線程安全問題。
關鍵的幾個地方,狀態,可變,可見性,鎖。
java.util.concurrent包中提供了Executor相關的線程池, ConcurrentHashMap等相關的併發Collection庫。
java.util.concurrent.atomic中提供了AtomicInteger等可以併發執行int包裝
java.util.concurrent.lock中提供了ReentrantLock, 讀寫鎖等更加豐富的鎖