本文主要對Java併發(Concurrent)相關的概念進行說明。算法
線程安全,指的是在併發的狀況之下,線程的調度順序不影響運行結果。編程
如不加鎖控制的轉帳操做,在單線程運行中是安全的,可是在多線程環境中,確定是不安全的。
這裏只給出示例,具體邏輯就沒不解釋了。安全
void transferMoney(User from, User to, float amount){ to.setMoney(to.getBalance() + amount); from.setMoney(from.getBalance() - amount); }
死鎖是指兩個或更多線程阻塞着等待其它處於死鎖狀態的線程所持有的鎖。微信
例如,多線程
假定場景:須要從本地讀取和處理兩個文件,讀取一個文件須要5秒,處理一個文件須要2秒。
單線程:併發
5秒讀取文件A 2秒處理文件A 5秒讀取文件B 2秒處理文件B --------------------- 總共須要14秒
多線程:ide
5秒讀取文件A 5秒讀取文件B + 2秒處理文件A 2秒處理文件B --------------------- 總共須要12秒
總結:操作系統
一個桌面應用程序存在多個按鈕。點擊這些按鈕,能夠分別進行一些耗時的工做。線程
單線程:設計
每次點擊一個按鈕,都會進行一項耗時的工做。必須等待此項工做完成以後,才能繼續監聽用戶操做。這時,用戶才能點擊其餘按鈕,進行其餘的工做。這樣的應用程序,對用戶而言,響應十分慢,體驗度不好。
多線程:
每次點擊一個按鈕,都會啓動一個子線程去進行這項耗時的工做,主線程繼續監聽用戶操做。這種狀況下,用戶能夠快速的分別點擊須要處理的按鈕。這樣的應用程序,對用戶而言,響應很快,體驗度很好。
線程之間的交互每每很是複雜。 不正確的線程同步產生的錯誤很是難以發現,而且難以重現、難以修復。
多線程開發會產生額外的資源消耗,主要來源於三個方面:
因此,因爲多線程會增長額外的資源消耗,對多線程程序而言,線程並非越多就會越快,過多的線程返回會致使程序變慢。