Java多執行緒的實現方法
我們知道一個程式通常是一個程式,而一個程式可以有多個執行緒。
執行緒是不規律的在交替進行,哪個執行緒搶到cpu時間誰就執行。而執行緒執行過程中cpu也可能被其他執行緒搶走,然後又會繼續搶cpu時間。直到執行緒執行結束或者所在程式已經被關掉。
Java類庫已經為我們提供了一個執行緒基類Thread,因此建立執行緒非常簡單。
方法一
建立兩個類FirstThread和SecondThread都繼承Thread類,然後重寫run方法。
public class FirstThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("F --> " + i);
}
}
}
public class SecondThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("S --> " + i);
}
}
}
測試程式碼:
public class Test {
public static void main(String[] args) {
FirstThread ft = new FirstThread();
SecondThread st = new SecondThread();
// 用start()呼叫執行緒的run方法。
// 注意這裡不能直接呼叫run(),否則就和普通的呼叫方法沒區別不會啟動執行緒
ft.start();
st.start();
}
}
部分執行結果:
F --> 0
F --> 1
F --> 2
F --> 3
F --> 4
F --> 5
F --> 6
F --> 7
F --> 8
F --> 9
F --> 10
F --> 11
F --> 12
F --> 13
S --> 0
S --> 1
S --> 2
S --> 3
S --> 4
S --> 5
S --> 6
S --> 7
F --> 14
F --> 15
F --> 16
F --> 17
F --> 18
F --> 19
S --> 8
S --> 9
S --> 10
F --> 20
執行結果可以看到兩個執行緒不規律的互動進行互相搶cpu時間。
所以建立執行緒只需要繼承Thread類,然後在重寫的run方法裡寫下想線上程裡執行的程式碼即可。注意呼叫時用通過呼叫start方法來啟動執行緒而不能直接呼叫run方法。否則只是普通的呼叫方法並沒有多執行緒的效果。
另外此時程式可不止兩個執行緒。一共有四個執行緒,分別是Main方法所在的主執行緒FirstThread、SecondThread和垃圾回收執行緒。
方法二
因為Java只能單繼承,繼承了Thread類就不能再繼承別的類了。這樣顯得不夠靈活,所以實現繼承更推崇的是讓執行緒類實現Runnable介面。
以FirstThread為例:
public class FirstThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("F --> " + i);
}
}
}
測試程式碼要改為直接建立Thread物件但是把實現了Runnable介面的類的物件作為引數傳進去。
public class Test {
public static void main(String[] args) {
Thread ft = new Thread(new FirstThread());
Thread st = new Thread(new SecondThread());
// 用start()呼叫執行緒的run方法。
// 注意這裡不能直接呼叫run(),否則就和普通的呼叫方法沒區別不會啟動執行緒
ft.start();
st.start();
}
}
以上可以起到和方法一一致的效果。
實際使用中這種實現執行緒的方法經常會寫成匿名內部類的形式,如以下這樣:
new Thread() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("匿名執行緒 --> " + i);
}
}
}.start();
Callable和Future
以上實現執行緒的方式雖然簡單但是有缺陷,就是run方法是void型別沒有返回值,而我們有時候希望執行緒執行完畢後返回一個結果。
程式碼共享
本文程式碼下載:百度網盤
相關文章
- Java多執行緒【三種實現方法】Java執行緒
- Java多執行緒的實現Java執行緒
- Java多執行緒實現方式Java執行緒
- Java實現多執行緒的三種方式Java執行緒
- Java高併發與多執行緒(二)-----執行緒的實現方式Java執行緒
- Java面試之Java中實現多執行緒有幾種方法Java面試執行緒
- Java多種方法實現等待所有子執行緒完成再繼續執行Java執行緒
- Java建立多執行緒的幾種方式實現Java執行緒
- Java之實現多執行緒的方式三:實現Callable介面(結合執行緒池使用)Java執行緒
- Java之實現多執行緒的方式二:實現Runnable介面Java執行緒
- Java建立多執行緒的一種方法Java執行緒
- 使用Java實現多執行緒程式設計Java執行緒程式設計
- java 多執行緒之使用 interrupt 停止執行緒的幾種方法Java執行緒
- Java多執行緒並行處理任務的實現Java執行緒並行
- 多執行緒(五)---執行緒的Yield方法執行緒
- Java多執行緒之守護執行緒實戰Java執行緒
- 如何實現多執行緒執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- Java多執行緒-執行緒池的使用Java執行緒
- Java多執行緒-執行緒中止Java執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- 多執行緒實現多工二執行緒
- 多執行緒實現多工一執行緒
- Java 執行緒池中的執行緒複用是如何實現的?Java執行緒
- Java多執行緒檔案分片下載實現Java執行緒
- java——多執行緒Java執行緒
- java多執行緒Java執行緒
- Java - 多執行緒Java執行緒
- java 多執行緒Java執行緒
- java多執行緒之執行緒的基本使用Java執行緒
- 【Java】【多執行緒】執行緒的生命週期Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- java多執行緒9:執行緒池Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- java執行緒實現方式Java執行緒