1. 程序與線程
1,首先程序是比較重量級的,有單獨的記憶體區域,是以程序比較安全(沒人跟你搶地方,除非你自己又建立幾個線程,那就是線程的事情了)。當然安全是有代價的——建立和銷毀程序的開銷遠大于線程。
2,線程是比較輕量級的,但是因為線程會共享記憶體,導緻可能出現安全性問題。是以務必要保證多個線程通路同一資源時,要麼這些線程都不改變資源,要麼在改變資源的情況下同一時間隻有一個線程可以改變資源(同時的情況下隻有一個線程獨占資源)。
2. 線程的情況
1,毫無疑問,使用多個線程比使用多個程序處理任務速度要快。
2,一個Java虛拟機可以建立多少個程序是不好說的,因為有的程序可能浪費很多資源(比如一個程序瘋狂的開幾百個線程同時通路很多資源)。最簡單例子,咱們看下windows資料總管裡面占用記憶體最小的幾個程序,可見最小的程序占用24K記憶體,好大一塊哦,可見程序是建立不了多少的。

3,那麼線程能建立多少呢,這個是有個大約的數字的。一般的伺服器最大的并發線程數在幾千到幾萬,至于到底能并發多少還得看伺服器配置、線程具體占用資源情況。
4,如果線程太多呢,當然記憶體就耗盡了,然後Java虛拟機沒記憶體可以用就快要GG了。
3. 線程池
1,實際上大多數情況下是不需要建立幾百甚至上千個線程的,一般情況下100個線程處理能力就很強了,通過使用線程池可以極大的提高線程的利用效率。
2,所謂的線程池就是搞上一些線程,完成任務後不銷毀,而是标記為空閑狀态,然後這些線程再給其他排隊的任務用。
3,因為不用為每個任務生成新線程,不用一直銷毀、建立線程,是以會節省很多開銷。
4,一般來說100個線程處理300-900個連接配接問題不大,因為連接配接并不會集中發生,具體的情況還要以實際測試為準。