併發編程是爲了讓程序運行得更快,可是並非啓動更多的線程就能讓程序最大限度的併發執行,一般在併發編程中會遇到下面的問題.java
CPU經過時間片非配算法來循環執行任務,當前任務執行一個時間片後會切換到下一個任務.在切換時會保存上一個任務的狀態,以便這個任務再次執行時,能夠在加載這個任務的狀態.因此任務從保存到再加載的過程就是一次上下文切換.git
測試多線程是否必定比單線程快 執行連接中的代碼發現,當併發操做較少時,併發執行的速度比串行慢,由於併發執行時,線程有建立和上下文切換的開銷.算法
形成死鎖的代碼 連接中的代碼會形成死鎖,代碼中thread1和thread2互相等待對方釋放鎖.避免死鎖的方法以下:數據庫
程序的運行速度受限於計算機的硬件或軟件資源.硬件限制有帶寬的上傳/下載速度,硬盤讀寫和CPU的處理速度;軟件限制有數據庫的鏈接數和socket的鏈接數等.
爲了解決資源限制,硬件能夠換設備,採用集羣併發執行程序;
軟件限制可使用鏈接池將數據庫和socket鏈接複用.編程