建立多線程程式的第一種方式:建立Thread類的子類 。
java.lang.Thread類:是描述線程的類,我們想要實作多線程程式,就必須繼承Thread類。
實作步驟:
- 建立一個Thread類的子類。
- 在Thread類的子類中重寫Thread類中的run方法,設定線程任務(開啟線程要做什麼?)。
- 建立Thread類的子類對象
- 調用Thread類中的方法start方法,開啟新的線程,執行run方法。
void start() 使該線程開始執行;java 虛拟機調用線程的 run 方法。
結果是兩個線程并行運作:目前線程(main線程)和另一個線程(建立新的線程,執行 run 方法)。
多次啟動一個線程是非法的。特别是目前線程已經結束執行後,不能再重新啟動。
java程式屬于搶占式排程,哪個線程的優先級高,哪個線程優先執行;同一個優先級,随機選擇一個執行
案例:
定義一個Thread類的子類:
package XianCheng.DuoThread;
//1. 建立一個Thread類的子類。
public class MyThread extends Thread{
//2. 在Thread類的子類中重寫Thread類中的run方法,設定線程任務(開啟線程要做什麼?)。
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("run:" + i);
}
}
}
使用這個子類:
package XianCheng.DuoThread;
/*
建立多線程程式的第一種方式:建立Thread類的子類
java.lang.Thread類:是描述線程的類,我們想要實作多線程程式,就必須繼承Thread類。
實作步驟:
1. 建立一個Thread類的子類。
2. 在Thread類的子類中重寫Thread類中的run方法,設定線程任務(開啟線程要做什麼?)。
3. 建立Thread類的子類對象
4. 調用Thread類中的方法start方法,開啟新的線程,執行run方法。
void start() 使該線程開始執行;java 虛拟機調用線程的 run 方法。
結果是兩個線程并行運作:目前線程(main線程)和另一個線程(建立新的線程,執行 run 方法)。
多次啟動一個線程是非法的。特别是目前線程已經結束執行後,不能再重新啟動。
java程式屬于搶占式排程,哪個線程的優先級高,哪個線程優先執行;同一個優先級,随機選擇一個執行
*/
public class Demo01Thread {
public static void main(String[] args) {
//3. 建立Thread類的子類對象
MyThread mt = new MyThread();
//4. 調用Thread類中的方法start方法,開啟新的線程,執行run方法。
mt.start();
for (int i = 0; i < 20; i++) {
System.out.println("main:" + i);
}
}
}
運作結果:
java程式屬于搶占式排程,哪個線程的優先級高,哪個線程優先執行;同一個優先級,随機選擇一個執行
main:0
main:1
main:2
main:3
main:4
main:5
run:0
run:1
run:2
run:3
run:4
run:5
建立多線程程式的第一種方式:實作Runnable接口
java.lang.Runnable
Runnable 接口應該由那些打算通過某一線程執行其執行個體的類來實作。類必須定義一個稱為 run 的無參數方法。
java.lang.Thread類的構造方法
Thread(Runnable target) 配置設定新的 Thread 對象。
Thread(Runnable target, String name) 配置設定新的 Thread 對象。
實作步驟:
- 建立一個Runnable接口的實作類
- 在實作類中重寫Runnable接口的run方法,設定線程任務
- 建立一個Runnable接口的實作類對象
- 建立Thread類對象,構造方法中傳遞Runnable接口的實作類對象
- 調用Thread類中的start方法,開啟新的線程執行run方法
案例:
定義一個Runnable接口的實作類:
package XianCheng.DuoThread;
//1. 建立一個Runnable接口的實作類
public class RunnableImpl implements Runnable{
//2. 在實作類中重寫Runnable接口的run方法,設定線程任務
@Override
public void run() {
for (int i = 0; i < 6; i++) {
System.out.println(Thread.currentThread().getName() + " --> " + i);
}
}
}
使用這個類:
package XianCheng.DuoThread;
/*
建立多線程程式的第一種方式:實作Runnable接口
java.lang.Runnable
Runnable 接口應該由那些打算通過某一線程執行其執行個體的類來實作。類必須定義一個稱為 run 的無參數方法。
java.lang.Thread類的構造方法
Thread(Runnable target) 配置設定新的 Thread 對象。
Thread(Runnable target, String name) 配置設定新的 Thread 對象。
實作步驟:
1. 建立一個Runnable接口的實作類
2. 在實作類中重寫Runnable接口的run方法,設定線程任務
3. 建立一個Runnable接口的實作類對象
4. 建立Thread類對象,構造方法中傳遞Runnable接口的實作類對象
5. 調用Thread類中的start方法,開啟新的線程執行run方法
*/
public class Demo01Runnable {
public static void main(String[] args) {
//3. 建立一個Runnable接口的實作類對象
RunnableImpl run = new RunnableImpl();
//4. 建立Thread類對象,構造方法中傳遞Runnable接口的實作類對象
Thread t = new Thread(run);
//5. 調用Thread類中的start方法,開啟新的線程執行run方法
t.start();
for (int i = 0; i < 6; i++) {
System.out.println(Thread.currentThread().getName() + " --> " + i);
}
}
}
運作結果:
java程式屬于搶占式排程,哪個線程的優先級高,哪個線程優先執行;同一個優先級,随機選擇一個執行
main --> 0
main --> 1
main --> 2
main --> 3
main --> 4
main --> 5
Thread-0 --> 0
Thread-0 --> 1
Thread-0 --> 2
Thread-0 --> 3
Thread-0 --> 4
Thread-0 --> 5