1. 程式人生 > 其它 >兩種實現多繼承的方法

兩種實現多繼承的方法

繼承Thread類

  • 子類繼承Thread類具備多執行緒能力

  • 啟動執行緒:子類物件.start()

  • 不建議使用:避免oop單繼承侷限性

package com.wang1.demo01;
//建立執行緒方式一:繼承Thread類,重寫run()方法,呼叫start開啟執行緒
//注意:執行緒開啟不一定立即執行,是由CPU排程
public class TestThread1 extends Thread{
public void run(){
//run方法執行緒體
for (int i = 0; i <200 ; i++) {
System.out.println("我在看程式碼--"+i);
}
}

public static void main(String[] args) {
//建立一個執行緒物件
TestThread1 testthread1=new TestThread1();
//呼叫start()方法開啟執行緒
testthread1.start();
//main執行緒,主執行緒
for (int i = 0; i <1000 ; i++) {
System.out.println("我在學習--"+i);
}
}

}

實現Runnable介面

  • 實現Runnable具備多執行緒能力

  • 啟動執行緒:傳入目標物件+Thread物件.start()

  • 推薦使用:避免單繼承侷限性,靈活方便,方便同一物件被多個執行緒使用

package com.wang1.demo01;
//建立執行緒方式2:實現runnable介面,重寫run方法,執行執行緒是要丟入runnable介面實現類,呼叫start()方法.
public class TestThread3 implements Runnable{
public void run(){
//run方法執行緒體
for (int i = 0; i <200 ; i++) {
System.out.println("我在看程式碼--"+i);
}
}

public static void main(String[] args) {
//建立runna介面實現物件
TestThread3 testThread3=new TestThread3();
//建立執行緒物件
/* Thread threat=new Thread(testThread3);
threat.start();*/
new Thread(testThread3).start();
//main執行緒,主執行緒
for (int i = 0; i <1000 ; i++) {
System.out.println("我在學習--"+i);
}
}


}

下載網圖

package com.wang1.demo01;

import com.sun.org.apache.xerces.internal.impl.xpath.XPath;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

//練習Thread,實現多執行緒同步下載圖片
public class TestThread2 implements Runnable{
//public class TextThreads extends Thread{
private String url;//網路圖片地址
private String name;//儲存的檔名
public TestThread2(String url,String name){
this.name=name;
this.url=url;
}
@Override
//下載圖片的執行緒執行體
public void run() {
WebDownloader webdownloader=new WebDownloader();
webdownloader.downloader(url,name);
System.out.println("下載了檔名為:"+name);
}

public static void main(String[] args) {
TestThread2 t1 = new TestThread2("https://www.kuangstudy.com/assert/course/c1/02.jpg","02.jpg");
TestThread2 t2 = new TestThread2("https://www.kuangstudy.com/assert/course/c1/01.jpg","01.jpg");
TestThread2 t3 = new TestThread2("https://www.kuangstudy.com/assert/course/c1/03.jpg","03.jpg");
new Thread(t1).start();
new Thread(t2).start();
new Thread(t3).start();
//t1.start();
//t2.start();
//t3.start();

}
}
//下載器
class WebDownloader{
//下載方法
public void downloader(String url,String name){
try {
FileUtils.copyURLToFile(new URL(url),new File(name));
} catch (IOException e) {
e.printStackTrace();
System.out.println("IO異常,downloander方法出現問題");
}
}
}