線程是什么?
線程是進程中的一條執行路徑,或者說是一個進程中獨立運行的最小單位,比如:我們使用迅雷下載文件,迅雷支持同時下載多個文件,文件數也是可以自定義的,每一個文件的下載就是一個線程,而迅雷這個軟件就是一個進程。
多線程是什么?
多線程:一個進程中同時有多個線程正在執行
為什么要使用多線程?
在一個程序中,有很多的操作是非常耗時的,如數據庫讀寫操作,IO操作等,如果使用單線程,那么程序就必須等待這些操作執行完成之后才能執行其他操作。使用多線程,可以在將耗時任務放在后台繼續執行的同時,同時執行其他操作。
例子:線程A被CPU執行,但是線程A中有一個IO操作,時間花費遠遠大於CPU的執行時間,所以后面的線程只有等待線程A執行完畢之后,才有機會執行,這種單線程執行的方式(同步)無法高效利用CPU,時間浪費也太多,而且用戶需要等待,所以使用多線程處理順應趨勢。
什么場景需要使用多線程?
解析:1 耗時的操作使用線程,提高應用程序響應 2 並行操作時使用線程,如C/S架構的服務器端並發線程響應用戶的請求。 3 多CPU系統中,使用線程提高CPU利用率 4 改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利於理解和修改。 其他情況都使用單線程。(該解釋來源於網絡)
多線程優點?
可以提高程序的效率。
多線程的缺點?
1.使用太多線程,是很耗系統資源,因為線程需要開辟內存。更多線程需要更多內存。
2.影響系統性能,因為操作系統需要在線程之間來回切換。
3.需要考慮線程操作對程序的影響,如線程掛起,中止等操作對程序的影響。
4.線程使用不當會發生很多問題。
什么是線程池?
創建線程要花費昂貴的資源和時間,如果任務來了才創建線程那么響應時間會變長,而且一個進程能創建的線程數有限。為了避免這些問題,在程序啟動的時 候就創建若干線程來響應處理,它們被稱為線程池
類比:可以做一個類比,比如當你做飯的時候,如果每次都是去很遠的地方挑水,那么時間成本就很大,但是如果在做飯之前就打好了一桶水,隨時要用就隨時取
實現多線程的方式?
實現runable接口,並實現該接口的run()方法
繼承thred類,重寫run()方法
實現callable接口,重寫call()方法