執行緒池的使用

2021-10-21 14:16:52 字數 2143 閱讀 6580

根據專案需要進行對的壓縮和上傳,但由於壓縮和上傳相應時間比較長,返回時間不在允許範圍內故此需要優化;優化方案最終採用執行緒池的形式降低系統資源消耗,以下為實現過程

邏輯層呼叫

1.把任務資料封裝到compressanduploadfiletask;

2.呼叫 consumerutil.puttask(task);把封裝類放入到佇列中去

compresspath = path.substring(0,path.lastindexof("."))+"-compress"+path.substring(path.lastindexof("."));//壓縮後位址

//使用執行緒池進行檔案的上傳和壓縮

//初始化任務資料

compressanduploadfiletask task= new compressanduploadfiletask(path,compresspath, compresspath);

consumerutil.puttask(task);

任務的資料封裝類

@data

public class compressanduploadfiletask

public compressanduploadfiletask(string srcpath)

}

接下來檢視 consumerutil類的具體實現

不難發現,consumerutil先是建立了乙個大小為1千的arrayblockingqueue的訊息佇列

@component

public class consumerutil implements initializingbean, beanpostprocessor ")

private string sshname;

@value(value = "$")

private string sshpasword;

@value(value = "$")

private string sshhost;

@value(value = "$")

private integer sshport;

private final threadpoolexecutor executor = (threadpoolexecutor) executors.newfixedthreadpool(8); // 建立乙個大小為8的固定執行緒池,可以按照cpu的核數初步判定,如果cpu密集性任務則建立n+1個,如果是io密集型任務則建立2n+1個,其中n即cpu的核數

private consumerutil ()

if(isstop)

//存到伺服器對應資料夾下

executor.execute(new runnable() catch (sftpexception e)

}});}}

};consumerthread.start();

}public void stop()

public void puttask(compressanduploadfiletask uploadfiletask) catch (interruptedexception e)

}@override

public void afterpropertiesset() throws exception

@data

public static class compressanduploadfiletask

public compressanduploadfiletask(string srcpath)

private string srcpath;

private string compresspath;

private string uploadpath;}}

其實類在載入的時候執行緒已經啟動了

consumerutil工具類建立了乙個大小為8的固定執行緒池

這一部分就是我們主要的任務,壓縮然後進行上傳操作

執行緒池的使用

簡而言之 兩個類 執行緒池的 類 public class threadpoolproxyfactory return mnormalthreadpoolproxy return public static threadpoolproxy createdownloadthreadpoolproxy ...

執行緒池的使用

執行緒池能幫助我們有效的管理執行緒,避免重複的建立銷毀執行緒。newfixedthreadpool 固定執行緒數量的執行緒池 newsinglethreadexecutor 返回乙個只有乙個執行緒的執行緒池 newcachedthreadpool 返回乙個可根據實際情況調整執行緒數量的執行緒池 ne...

執行緒池的使用

如果在使用執行緒的時候就去建立乙個新執行緒,當併發的執行緒數量很多,並且每個執行緒都是執行乙個時間很短的任務就結束了,系統在建立和銷毀執行緒上花費的時間和消耗的系統資源都相當大,甚至要比處理任務的時間和資源要多的多,同時活動的執行緒也需要消耗系統資源.executor是乙個頂層介面,它只宣告了乙個方...