一、問題描述:已知目錄下乙個較大檔案a.txt(內容4g大小),運用多執行緒將此檔案內容拷貝的另乙個目錄下。
之前在io流io流單執行緒進行檔案內容的複製寫過這樣的**。但是這類方法適用於內容較小的檔案,內容過大的話,拷貝速度會變慢,效率非常低。
這次運用多執行緒來進行檔案拷貝,大大節省了cpu的利用率,讓程式變得更加高效。
二、思路
多執行緒處理這個問題,大概思路就是,將整個待拷貝檔案內容分成若干等份(4g的 檔案,分成4份),每個執行緒處理固定範圍(1g)的內容,每個執行緒處理的範圍起始位置,用io中的隨機訪問類的seek()方法來確定;
注: 如果檔案內容不能等分成若干範圍,則將最後剩餘的部分,分給最後乙個執行緒處理。這要在**中體現出來。
三、**展示
四、執行結果public
class
threadcopydemo
public
static
void
mutilthreadcopyfile
(string srcpath,string destpath,integer threadnum)
//檔案劃分
file file =
newfile
(srcpath)
;//獲取檔案長度
long length = file.
length()
;//計算子執行緒處理的長度
long len = length/threadnum;
// 建立並劃分每個子執行緒所讀的長度
for(
int i =
0; i < threadnum-
1; i++
)//把剩餘的分給最後乙個執行緒
subthread subthread =
newsubthread
(srcpath, destpath, threadnum * len, file.
length()
);system.out.
println
("lastthread start...");
subthread.
start()
; system.out.
println
("lastthread end...");
}}//自定義子執行緒類 繼承thread
class
subthread
extends
thread
@override
public
void
run()}
srcfile.
close()
;//關閉流
destfile.
close()
;}catch
(ioexception e)
}}
這是原檔案a.txt的內容
b.txt可有可無,因為隨機訪問類在寫入的時候,會先判斷檔案是否存在,不存在則新建乙個。
然後執行程式,
點開b.txt檔案,內容就被複製過來了
Java 多執行緒實現
在實際應用中我們不會在乙個手機或者電腦上進行單執行緒的開發或者使用,一般都是多執行緒。執行緒 程式中執行的具體事務 程序 表示正在執行的應用程式,乙個程序可以有多個執行緒。事實上執行緒是有執行順序的,但是由於cpu執行的速度非常快,所以覺得是在併發執行,其實是偽裝的併發執行。執行緒的實現有兩種方法 ...
實現Java多執行緒
有三種使用執行緒的方法 class mythread extends thread public class test 推薦這個!實現這個介面的類還可以繼承自其它的類,用3.1就沒有辦法再去繼承別的類 step1 自定義類並實現rubbale介面,實現run 方法 step2 建立thread物件,...
Java多執行緒的實現方式
多執行緒有3種實現的方法 繼承thread 類建立執行緒 實現了runnable介面介面建立執行緒 通過可callable和futrue建立執行緒 第一種 繼承thread類建立執行緒,步驟如下 建立乙個thread類的子類。覆蓋thread類的run 中的方法。建立所定義的子類的乙個物件。呼叫該物...