最典型的應用比如tomcat,tomcat內部采用的就是多線程,上百個客戶端訪問同一個web應用,tomcat接入后都是把后續的處理扔給一個新的線程來處理,這個新的線程最后調用到我們的servlet程序,比如doGet或者doPost方法。
如果不采用多線程機制,上百個人同時訪問一個web應用的時候,tomcat就得排隊串行處理了,那樣客戶端根本是無法忍受那種訪問速度的。
還有就是需要異步處理的時候,需要使用多線程。比如task a和task b要並行處理,單個線程只能串行處理,先做完task a然后再做task b。如果想要多個task同時執行的話,就必須為每個task分配一個線程,然后通過java虛擬機的線程調度,來同時執行多個任務。比如你的CPU是多核心的話,就可以讓一個CPU執行一個線程。如果只有一個CPU的話,底層是按照分時復用的原則,各個線程按照時間片來獲得CPU資源。
----------------------------------------------------------------------------------------------------------------------------------------------------------
你跟他說,如果做 java web 方面開發的話幾乎用不到多線程!因為有多線程的地方 servlet 容器或者其他開發框架都已經實現掉了!
一般在網絡應用程序中使用多線程的地方非常多!
另外,你說的拷貝文件使用多線程,那是沒有用的!以多線程來提高效率的場景一般在 CPU 計算型,而不是在 IO 讀寫型。CPU 可以會有多個核心並行處理計算,但是磁盤 IO 就沒這功能了,磁頭只有一個,根本不可能靠多線程提高效率!
一般來說,磁盤 IO 的並發能力為 0,也就是說無法支持並發!網絡 IO 的話由於帶寬的限制的,使用多線程處理最多也只能達到帶寬的極值。
對於磁盤 IO 來說,多線程可以用於一個線程專門用於讀寫文件,其他的線程用於對讀取數據進行處理,這樣才有可能更好地利用 CPU 資源。
如果僅僅是單純的文件復制,使用多線程操作的話,會使用磁頭在磁盤上不停地進行尋道操作,使得效率更為低下!
-----------------------------------------------------------------------------------------------------------------------------------------------------------
1。壓力測試時,會用到多線程。
2。服務器編程時,會用到多線程。
3。使用監聽器時,可能會用到多線程。
4。跑JOB時,可能會用到多線程。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
學習了,還有一種極為普遍的使用多線程的場景是UI編程,一般UI界面繪制於主線程,為了不阻塞主線程讓用戶體驗更流暢,需要創建單獨的線程處理耗時操作,處理完了再更新主界面,典型的案例就是android應用開發
-----------------------------------------------------------------------------------------------------------------------------------------------------------
一些C/S模式比如說網絡游戲(基於socket協議)一般在服務器那邊處理的時候一個客戶端,一個線程;還有就是一些銀行軟件,用到了線程同步等等
-----------------------------------------------------------------------------------------------------------------------------------------------------------