硬件限制:帶寬、硬盤讀寫速度、CPU的處理速度。 軟件限制:數據庫的連接數、socket的連接數等等。 應對策略:對于硬件限制,考慮集群并行執行程序,如Hadoop、服務器集群,不同機器處理不同數據??梢酝ㄟ^“數據ID%機器數”,計算得到一個機器的編號,然后由對應編號的機器處理這筆數據。對于軟件限制,可以使用連接池和socket復用等管理連接數
多線程是為了利用現有資源讓程序運行得更快
不是,因為多線程創建、上下文切換會影響執行速度。每個線程都有自己的Stack,java在64位系統默認Stack大小是1024KB
利用線程池
A、多線程競爭鎖時,會引起上下文切換,可以采用三種方式避免鎖的使用: ThreadLocal:單個線程獨享數據 無鎖并發編程:如將數據的ID按照Hash算法取模分段,不同線程處理不同段的數據 CAS算法:Java的Atomic包使用CAS算法來更新數據,而不需要加鎖 B、根據硬件配置和任務量創建適量線程 C、協程(coroutine):在單線程里實現多個任務的調度,并在單線程里維持多個任務間的切換
jstack pid > /home/dump20170307 grep /home/dump20170307 | awk ‘{PRint
注意:Runnable被包含到Running中

線程間互相等待彼此持有的鎖會產生死鎖,通過jstack可以方便排查 避免一個線程中同時獲取多個鎖 避免一個線程的鎖內同時占有多個資源 嘗試使用定時鎖tryLock(timeout)
新聞熱點
疑難解答