Java多線程的實現需要有一個前提:有一個線程的執行主類。
多線程的主類
普通的Java方法要想執行,需要有一個類,類里面有一個main方法,這樣的類就是主類。
而線程的方法要想執行,除了如同普通方法那樣的主類,還需要一個多線程的主類。
多線程的主類
如果要想實現多線程的主類,現在有兩種方法:
- 繼承一個Thread類;
- 【推薦】實現Runnable、Callable接口。
繼承Thread實現多線程主類
java.lang.Thread是一個線程操作的核心類。如果現在要想定義一個線程的主類,就是直接繼承Thread類,然后覆寫其中的run()
方法。這個方法就相當于普通主類的main方法。
當有了線程的主類之后,我們會考慮怎么調用。但是,注意的是,調用線程的主類是通過主類的main方法來調用的。調用方法是Thread主類的start
方法實現線程啟動的。
class MyThread extends Thread{
private String title;
public MyThread(String title) {
this.title = title;
}
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println("My thread title="+title+"i="+i);
}
}
}
public class ThreadDemo {
public static void main(String args[]){
MyThread myThread1 = new MyThread("thread1");
myThread1.start();
MyThread myThread2 = new MyThread("thread1");
myThread2.start();
MyThread myThread3 = new MyThread("thread1");
myThread3.start();
}
}
線程交替執行的過程如下:
交替執行效果
由于是交替執行的,每次執行的效果應該都是不一樣的。
為什么要通過start調用run方法呢?
簡單來說,我們編寫了run方法,可實際上要實現多線程,必然是對操作系統的調用,由操作系統協調系統資源來實現。
start函數中通過一個start0來調用不同操作系統上的JVM,由JVM負責向不同的操作系統進行協調。這樣,就屏蔽了底層的資源協調和實現細節,編碼人員只需要關注程序協調的統一接口start
方法即可。
start的作用