package cn.itcast_02;
/*
* 該類要重寫run()方法,為什麼呢?
* 不是類中的所有程式碼都需要被執行緒執行的。
* 而這個時候,為了區分哪些程式碼能夠被執行緒執行,java提供了Thread類中的run()用來包含那些被執行緒執行的程式碼。
*/
public class MyThread extends Thread {
@Override
public void run() {
// 自己寫程式碼
// System.out.println("好好學習,天天向上");
// 一般來說,被執行緒執行的程式碼肯定是比較耗時的。所以我們用迴圈改進
for (int x = 0; x < 200; x++) {
System.out.println(x);
}
}
}
package cn.itcast_02;
/*
* 需求:我們要實現多執行緒的程式。
* 如何實現呢?
* 由於執行緒是依賴程式而存在的,所以我們應該先建立一個程式出來。
* 而程式是由系統建立的,所以我們應該去呼叫系統功能建立一個程式。
* Java是不能直接呼叫系統功能的,所以,我們沒有辦法直接實現多執行緒程式。
* 但是呢?Java可以去呼叫C/C++寫好的程式來實現多執行緒程式。
* 由C/C++去呼叫系統功能建立程式,然後由Java去呼叫這樣的東西,
* 然後提供一些類供我們使用。我們就可以實現多執行緒程式了。
* 那麼Java提供的類是什麼呢?
* Thread
* 通過檢視API,我們知道了有兩種方式實現多執行緒程式。
*
* 方式1:繼承Thread類。
* 步驟
* A:自定義類MyThread繼承Thread類。
* B:MyThread類裡面重寫run()?
* 為什麼是run()方法呢?
* C:建立物件
* D:啟動執行緒
*/
public class MyThreadDemo {
public static void main(String[] args) {
// 建立執行緒物件
// MyThread my = new MyThread();
// my.run();
// my.run();
// 呼叫run()方法為什麼是單執行緒的呢?
// 因為run()方法直接呼叫其實就相當於普通的方法呼叫,所以你看到的是單執行緒的效果
// 要想看到多執行緒的效果,就必須說說另一個方法:start()
// 面試題:run()和start()的區別?
// run():僅僅是封裝被執行緒執行的程式碼,直接呼叫是普通方法
// start():首先啟動了執行緒,然後再由jvm去呼叫該執行緒的run()方法。
// MyThread my = new MyThread();
// my.start();
// IllegalThreadStateException:非法的執行緒狀態異常
// 為什麼呢?因為這個相當於是my執行緒被呼叫了兩次。而不是兩個執行緒啟動。
// my.start();
// 建立兩個執行緒物件
MyThread my1 = new MyThread();
MyThread my2 = new MyThread();
my1.start();
my2.start();
}
}