文章目錄
- 前言
- 實作步驟
- 執行個體——多線程下載下傳圖檔
- 總結
前言
-
什麼是多線程?
我的了解為:将100輛汽車行駛的公路從單車道改成三車道,使得多條車道同時有車行駛,解決擁堵和時長問題。
于是跟着狂神的視訊對該部分内容進行學習。
實作步驟
本篇博文通過繼承Thread類實作多線程任務。其實作步驟為:
1) 自定義的線程類繼承Thread類
2) 重寫run()方法,編寫線程執行體
3) 建立線程對象,調用start()方法啟動線程。
執行個體——多線程下載下傳圖檔
- 目标:實作多線程下載下傳網頁上的圖檔到本地
-
導入的包:common-io.jar包
使用包中FileUtils類中方法copyURLToFile(),改方法通過檔案url位址将該檔案儲存到本地。
我用的maven導入該包,代碼為:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
-
實作該功能的步驟:
1) 建立一個下載下傳器WebLoader類,類中寫入下載下傳圖像到本地的方法downloader()。
2) 自定義一個線程類TestThread,繼承Thread類。
3) 定義TestThread類的構造函數,傳入下載下傳需要的url參數和儲存圖像時需要的檔案名name。
4) 重寫方法run()。run()方法為執行下載下傳圖像的執行體。建立WebLoader類對象,調用downloader()方法。
5) 在main函數中建立線程類TestThread的對象,調用start()方法啟動線程。
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class TestThread extends Thread{
private String url;
private String name;
public TestThread(String url, String name){
this.url = url;
this.name = name;
}
// 下載下傳圖檔的執行體
@Override
public void run() {
WebLoader webLoader = new WebLoader();
webLoader.downloader(url, name);
System.out.println("下載下傳的檔案名為:" + name);
}
public static void main(String[] args) {
TestThread testThread1 = new TestThread("https://bkimg.cdn.bcebos.com/pic/a8014c086e061d95fa492c5e79f40ad162d9ca4d?x-bce-process=image/resize,m_lfit,w_220,limit_1", "./pic1.png");
TestThread testThread2 = new TestThread("https://bkimg.cdn.bcebos.com/pic/09fa513d269759ee8ca42c7ebbfb43166c22df8b?x-bce-process=image/resize,m_lfit,w_640,limit_1", "./pic2.png");
TestThread testThread3 = new TestThread("https://bkimg.cdn.bcebos.com/pic/1c950a7b02087bf4310ebecdfed3572c11dfcf30?x-bce-process=image/resize,m_lfit,w_220,limit_1", "./pic3.png");
testThread1.start();
testThread2.start();
testThread3.start();
}
}
// 下載下傳器
class WebLoader{
public void downloader(String url, String name){
try {
// url為下載下傳圖像的url位址, name為下載下傳圖像儲存到本地的名稱
FileUtils.copyURLToFile(new URL(url), new File(name));
} catch (IOException e) {
e.printStackTrace();
System.out.println("IO異常,downloader有問題");
}
}
}
-
結果
第一次執行結果:
第二次執行結果:Java多線程實作(一)——繼承Thread類前言實作步驟執行個體——多線程下載下傳圖檔總結 由執行結果可以得出:線程不一定立即執行,而是并行交替進行,由cpu安排排程。Java多線程實作(一)——繼承Thread類前言實作步驟執行個體——多線程下載下傳圖檔總結
總結
繼承Thread類是實作多線程的一種方法,下一篇博文将介紹通過實作Runnable方法實作多線程。兩種方法相較更推薦第二種方法。因為該方法可避免單繼承的局限性,更加靈活友善,可使得同一個對象被多個線程使用。