根據專案需要進行對的壓縮和上傳,但由於壓縮和上傳相應時間比較長,返回時間不在允許範圍內故此需要優化;優化方案最終採用執行緒池的形式降低系統資源消耗,以下為實現過程邏輯層呼叫
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是乙個頂層介面,它只宣告了乙個方...