如何建立多執行緒?
方式1:繼承Thread類
步驟:
1):定義一個類A繼承於Java.lang.Thread類.
2):在A類中覆蓋Thread類中的run方法.
3):我們在run方法中編寫需要執行的操作:run方法裡的程式碼,執行緒執行體.
4):在main方法(執行緒)中,建立執行緒物件,並啟動執行緒.
(1)建立執行緒類物件:
A類 a = new A類();
(2)呼叫執行緒物件的start方法:
a.start();//啟動一個執行緒
注意:千萬不要呼叫run方法,如果呼叫run方法好比是物件呼叫方法,依然還是隻有一個執行緒,並沒有開啟新的執行緒.
執行緒只能啟動一次!
建立啟動執行緒例項:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//1):定義一個類A繼承於java.lang.Thread類.
class
MusicThread
extends
Thread{
//2):在A類中覆蓋Thread類中的run方法.
public void
run() {
//3):在run方法中編寫需要執行的操作
for
(
int
i =
0
; i <
50
; i ++){
System.out.println(
"播放音樂"
+i);
}
}
}
public
class
ExtendsThreadDemo {
public
static
void
main(String[] args) {
for
(
int
j =
0
; j <
50
; j ++){
System.out.println(
"運行遊戲"
+j);
if
(j ==
10
){
//4):在main方法(執行緒)中,建立執行緒物件,並啟動執行緒.
MusicThread music =
new
MusicThread();
music.start();
}
}
}
}
|
方式2:實現Runnable介面
步驟:
1):定義一個類A實現於java.lang.Runnable介面,注意A類不是執行緒類.
2):在A類中覆蓋Runnable介面中的run方法.
3):我們在run方法中編寫需要執行的操作:run方法裡的,執行緒執行體.
4):在main方法(執行緒)中,建立執行緒物件,並啟動執行緒.
(1)建立執行緒類物件:
Thread t = new Thread(new A());
(2)呼叫執行緒物件的start方法:
t.start();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//1):定義一個類A實現於java.lang.Runnable介面,注意A類不是執行緒類.
class
MusicImplements
implements
Runnable{
//2):在A類中覆蓋Runnable介面中的run方法.
public
void
run() {
//3):在run方法中編寫需要執行的操作
for
(
int
i =
0
; i <
50
; i ++){
System.out.println(
"播放音樂"
+i);
}
}
}
public
class
ImplementsRunnableDemo {
public
static
void
main(String[] args) {
for
(
int
j =
0
; j <
50
; j ++){
System.out.println(
"運行遊戲"
+j);
if
(j ==
10
){
//4):在main方法(執行緒)中,建立執行緒物件,並啟動執行緒
MusicImplements mi =
new
MusicImplements();
Thread t =
new
Thread(mi);
t.start();
}
}
}
}
|
分析繼承方式和實現方式的區別:
繼承方式: 1):從設計上分析,Java中類是單繼承的,如果繼承了Thread了,該類就不能再有其他的直接父類了. 2):從操作上分析,繼承方式更簡單,獲取執行緒名字也簡單.(操作上,更簡單) 3):從多執行緒共享同一個資源上分析,繼承方式不能做到.實現方式: 1):從設計上分析,Java中類可以多實現介面,此時該類還可以繼承其他類,並且還可以實現其他介面,設計更為合理. 2):從操作上分析,實現方式稍微複雜點,獲取執行緒名字也比較複雜,得使用Thread.currentThread()來獲取當前執行緒的引用.
3):從多執行緒共享同一個資源上分析,實現方式可以做到(是否共享同一個資源).
補充:實現方式獲取執行緒名字:
String name = Thread.currentThread().getName();