線程:輕量級進程,是CPU最小的調度單元
1.併發/高併發
硬件:CPU、內存、磁盤、網絡
軟件:最大化的利用硬件資源:線程數量、JVM內存分配大小、網絡通信機制(BIO,NIO,AIO)、磁盤IO
併發和並行:
併發:體現的是服務端承載的吞吐量 單核心CPU也是支持多線程的,cpu的時間片切換
並行:CPU能同時處理的多個線程
多線程特點:1.異步 2.並行
Java中的線程
Runnable接口
Thread類
Callable/future
線程基礎
線程的生命週期
狀態:
阻塞 (線程阻塞都會釋放CPU)
WAITING wait()
TIMED_WAITING sleep(100) 帶有休眠時間的阻塞
BLOCKED 沒搶到鎖的狀態
IO阻塞
線程的啓動
new Thread.start()
爲什麼不是run?
線程啓動過程:
線程的終止
run方法執行結束
volatile jint_interrupted; state
t1.stop() //及其不推薦,會造成數據的不完整
t1.interrupt();
Thread.isInterrupted() //復位
interrupt()
設置一個共享變量的值true
喚醒處於阻塞狀態下的線程 (阻塞狀態下的線程都會有 InterruptedException來捕獲,並在其中處理)
本質上interrupt()是通過一個共享變量來實現線程間的通信