標籤:輸入 靈活 read 操作 導致 隊列 資源 多資源 --
1.並發通常可以提高單一處理器上程式的效能
其實,在單一處理器上並發的執行程式鎖用的開銷大於順序執行。然而順序執行時,程式有時會因為某些條件(通常是I/O問題)導致不能繼續執行,稱為線程阻塞,如果沒有並發,程式將停止不前。而使用了並發,一個任務阻塞,其他任務還可以繼續執行,這就保證了程式的完成。所以,如果確定沒有任務會出現阻塞,在單一處理器上並發執行程式是不必要的。
2.並發在單一處理器上效能提高最常見的執行個體是--事件驅動的編程
並發最迷人的額就是可以產生可響應的使用者介面,比如某個程式將長期的運行某個操作,但是又要隨時處理使用者的輸入,如果在這個長期任務的每一段都加入一個處理使用者輸入的程式,那是十分不明智的,而建立單獨的線程來處理使用者輸入就是非常棒的實現
3.作業系統會隔離進程,但Java卻不行,所以,Java多線程最困難的就是協調多個線程對同一塊資源的訪問,確保資源不會同時被多個線程訪問。
4.四中線程池的區別(newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor )
new Thread()建立線程這種方式有很多弊端:a.每次new Thread建立對象效能差。b.線程缺乏統一管理,可能無限制建立線程,相互之間競爭,佔用過多資源導致死機。c.缺乏更多功能,如定時執行,定期執行,線程中斷。
newCachedThreadPool:建立一個可快取的線程池,如果線程長度超過處理需要,可靈活的回收空閑線程,若沒有可回收的就建立線程(首選)
newFixedThreadPool:定長線程池,可控制線程的最大並發數,超出的線程按隊列等候
newScheduledThreadPool:定時線程池,支援定時及週期性任務執行
newSingleThreadExecutor :單一線程池,只會用唯一的線程來執行工作,所有任務按照FIFO來執行
Java多線程筆記