摘要:線程池可以用來解決處理一個特定請求最大線程數量限制問題。安撫多歲的發發發線程池的作用線程池作用就是限制系統中執行線程的數量。若隊列中沒有等待進程,線程池的這一資源處于等待。此線程池支持定時以及周期性執行任務的需求。
前言
面試中我們經常會遇到多線程和線程池的問題,究竟如何回答呢?今天關于Java中的線程池,我們就來學習一下。
什么是線程池線程池是指在初始化一個多線程應用程序過程中創建一個線程集合,然后在需要執行新的任務時重用這些線程而不是新建一個線程。線程池中線程的數量通常完全取決于可用內存數量和應用程序的需求。然而,增加可用線程數量是可能的。線程池中的每個線程都有被分配一個任務,一旦任務已經完成了,線程回到池子中并等待下一次分配任務。
說白了就是為一應用執行多個線程的一個線程集合體。
為什么需要線程池?使用線程池,我目前解決了一下問題:
利用線程池, 獲取一個視頻中的多個封面,從而節約了一些時間和資源
后臺服務器不支持多張圖片上傳,利用線程池,進行多張圖片上傳,從而減少上傳的時間
效果圖如下:
上傳前:9張圖片至少要用3秒,利用線程池優化之后, 9張圖片要用1秒。
基于以下幾個原因在多線程應用程序中使用線程是必須的:
1.減少了創建和銷毀線程的次數,每個工作線程都可以被重復利用,可執行多個任務。
2.可以根據系統的承受能力,調整線程池中工作線線程的數目,防止因為消耗過多的內存,而把服務器累趴下(每個線程需要大約1MB內存,線程開的越多,消耗的內存也就越大,最后死機)。
線程池改進了一個應用程序的響應時間。由于線程池中的線程已經準備好且等待被分配任務,應用程序可以直接拿來使用而不用新建一個線程。
線程池節省了CLR 為每個短生存周期任務創建一個完整的線程的開銷并可以在任務完成后回收資源。
線程池根據當前在系統中運行的進程來優化線程時間片。
線程池允許我們開啟多個任務而不用為每個線程設置屬性。
線程池允許我們為正在執行的任務的程序參數傳遞一個包含狀態信息的對象引用。
線程池可以用來解決處理一個特定請求最大線程數量限制問題。
安撫多歲的發發發
線程池的作用:線程池作用就是限制系統中執行線程的數量。
根據系統的環境情況,可以自動或手動設置線程數量,達到運行的最佳效果;少了浪費了系統資源,多了造成系統擁擠效率不高。用線程池控制線程數量,其他線程排 隊等候。一個任務執行完畢,再從隊列的中取最前面的任務開始執行。若隊列中沒有等待進程,線程池的這一資源處于等待。當一個新任務需要運行時,如果線程池 中有等待的工作線程,就可以開始運行了;否則進入等待隊列。
舉個例子
new Thread(new Runnable() { @Override public void run() { paPaPaYourGridFriend(); } }).start();
如果你還在用new Thread執行一個異步任務,so你就Out了!
如果你還在用new Thread執行一個異步任務,so你就Out了!
如果你還在用new Thread執行一個異步任務,so你就Out了!
a. 每次new Thread新建對象性能差。
b. 線程缺乏統一管理,可能無限制新建線程,相互之間競爭,及可能占用過多系統資源導致死機或oom。
c. 缺乏更多功能,如定時執行、定期執行、線程中斷。
Java 線程池1. newSingleThreadExecutor
創建一個單線程的線程池。這個線程池只有一個線程在工作,也就是相當于單線程串行執行所有任務。如果這個唯一的線程因為異常結束,那么會有一個新的線程來替代它。此線程池保證所有任務的執行順序按照任務的提交順序執行。
2.newFixedThreadPool
創建固定大小的線程池。每次提交一個任務就創建一個線程,直到線程達到線程池的最大大小。線程池的大小一旦達到最大值就會保持不變,如果某個線程因為執行異常而結束,那么線程池會補充一個新線程。
3. newCachedThreadPool
創建一個可緩存的線程池。如果線程池的大小超過了處理任務所需要的線程,
那么就會回收部分空閑(60秒不執行任務)的線程,當任務數增加時,此線程池又可以智能的添加新線程來處理任務。此線程池不會對線程池大小做限制,線程池大小完全依賴于操作系統(或者說JVM)能夠創建的最大線程大小。
4.newScheduledThreadPool
創建一個大小無限的線程池。此線程池支持定時以及周期性執行任務的需求。
private void TextnewSingleThreadExecutor(){ ExecutorService pool = Executors. newSingleThreadExecutor(); MyTask1 task1 = new MyTask1(); MyTask2 task2 = new MyTask2(); MyTask3 task3 = new MyTask3(); // pool.execute(task1); // pool.execute(task2); // pool.execute(task3); new Thread(task1).start(); new Thread(task2).start(); new Thread(task3).start(); } private class MyTask1 implements Runnable{ @Override public void run() { //循環輸出 for(int i = 0; i < 100; i++) { System.out.print("A"+i+" "); } } } private class MyTask2 implements Runnable{ @Override public void run() { // try { // Thread.sleep(1000); // } catch (InterruptedException e) { // e.printStackTrace(); // } //循環輸出 for(int i = 0; i < 100; i++) { System.out.print("B"+i+" "); } } } private class MyTask3 implements Runnable{ @Override public void run() { //循環輸出 for(int i = 0; i < 100; i++) { System.out.print("C"+i+" "); } } }
a. 重用存在的線程,減少對象創建、消亡的開銷,性能佳。
b. 可有效控制最大并發線程數,提高系統資源的使用率,同時避免過多資源競爭,避免堵塞。
c. 提供定時執行、定期執行、單線程、并發數控制等功能。
線程池真的是太好用了,如果在項目中通過線程池管理線程,,你將會發現其中的諸多優勢!
閱讀更多20+個很棒的Android開源項目
2018年Android面試題含答案--適合中高級(下)一份完整的Android Studio搭建Flutter教程[](http://mp.weixin.qq.com/s?__b...
深入了解JAVA的線程中斷方法經驗之總結
子線程為什么不能更新UI線程詳解
相信自己,沒有做不到的,只有想不到的在這里獲得的不僅僅是技術!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71662.html
摘要:線程池可以用來解決處理一個特定請求最大線程數量限制問題。安撫多歲的發發發線程池的作用線程池作用就是限制系統中執行線程的數量。若隊列中沒有等待進程,線程池的這一資源處于等待。此線程池支持定時以及周期性執行任務的需求。 前言 面試中我們經常會遇到多線程和線程池的問題,究竟如何回答呢?今天關于Java中的線程池,我們就來學習一下。 什么是線程池 線程池是指在初始化一個多線程應用程序過程中創建...
摘要:去美團面試,問到了什么是線程池,如何使用,為什么要用以下做個總結。二線程池線程池的作用線程池作用就是限制系統中執行線程的數量。真正的線程池接口是。創建固定大小的線程池。此線程池支持定時以及周期性執行任務的需求。 去美團面試,問到了什么是線程池,如何使用,為什么要用,以下做個總結。關于線程之前也寫過一篇文章《高級面試題總結—線程池還能這么玩?》 1、什么是線程池:? java.util...
摘要:去美團面試,問到了什么是線程池,如何使用,為什么要用以下做個總結。二線程池線程池的作用線程池作用就是限制系統中執行線程的數量。真正的線程池接口是。創建固定大小的線程池。此線程池支持定時以及周期性執行任務的需求。 去美團面試,問到了什么是線程池,如何使用,為什么要用,以下做個總結。關于線程之前也寫過一篇文章《高級面試題總結—線程池還能這么玩?》 1、什么是線程池:? java.util...
摘要:在協議中,協議提供可靠的連接服務,連接是通過三次握手進行初始化的。三次握手的目的是同步連接雙方的序列號和確認號并交換窗口大小信息。采用三次握手的辦法可以防止上述現象發生。 TCP是什么? 具體的關于TCP是什么,我不打算詳細的說了;當你看到這篇文章時,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我們就繼續。它只是一個超級麻煩的協議,而它又是互聯網的基礎,也是每個程序員必備...
閱讀 2320·2021-09-29 09:42
閱讀 555·2021-09-06 15:02
閱讀 2595·2021-09-02 15:40
閱讀 2109·2019-08-30 14:23
閱讀 1859·2019-08-30 13:48
閱讀 1288·2019-08-26 12:01
閱讀 957·2019-08-26 11:53
閱讀 2140·2019-08-23 18:31