多线程概念
概念
多線程:是指從軟件或者硬件上實現多個線程并發執行的技術,多線程包括軟件多線程和硬件多線程。
軟件多線程:即便處理器只能運行一個線程,操作系統也可以通過快速的在不同線程之間進行切換,由于時間間隔很小,來給用戶造成一種多個線程同時運行的假象。
進程:是指計算機中已運行的程序.
并行:并列運行,多個CPU下支持
并發:多個任務請求運行,CPU輪流交替運行
進程和線程區別:一個應用程序啟動一個進程,一個進程可以有多個線程
多線程優點:程序運行速度快、執行程序可以后臺運行、提高響應效果
多線程缺點:多線程共享堆內存和方法區(存在線程安全的問題)棧內存不共享,啟動多線程暉占用更多內存(資源消耗增多)
線程池:面向對象編程中,創建和銷毀對象是很費時間的,因為創建一個對象要獲取內存資源或者其它更多資源。線程池維護著多個線程,等待著監督管理者分配可并發執行的任務。這避免了在處理短時間任務時創建與銷毀線程的代價。
線程池的創建方式:
§? Executors.newFixedThreadPool(int nThreads);
通過傳入的int類型參數來指定創建線程池中的線程數,如果任務數量大于線程數量,則任務會進行等待。
§? Executors.newCachedThreadPool();
會根據需要創建新線程的線程池,如果線程池中的線程數量小于任務數時,會創建新的線程,線程池中的線程最大數量是Integer.MAX_VALUE,int類型的最大值。如果線程的處理速度小于任務的提交速度時,會不斷創建新的線程來執行任務,這樣有可能會因為創建過多線程而耗盡CPU 和內存資源。
§? Executors.newFixedThreadPool(int nThreads);
通過傳入的int類型參數來指定創建線程池中的線程數,如果任務數量大于線程數量,則任務會進行等待。
§? Executors.newCachedThreadPool();
會根據需要創建新線程的線程池,如果線程池中的線程數量小于任務數時,會創建新的線程,線程池中的線程最大數量是Integer.MAX_VALUE,int類型的最大值。如果線程的處理速度小于任務的提交速度時,會不斷創建新的線程來執行任務,這樣有可能會因為創建過多線程而耗盡CPU 和內存資源。
?
原子性:即一個操作或多個操作執行過程中不會被任何因素打斷
例如:
1 int x = 1;//原子性 2 int y = x;//讀取x,賦值y,非原子性 3 x++;//讀取x,自增1,非原子性 4 x = x + 1;//讀取x,加1,非原子性?
轉載于:https://www.cnblogs.com/feichangnice/p/10647595.html
總結
- 上一篇: Zookeeper运维问题集锦
- 下一篇: 【vue】vue.config.js