【騏程】多執行緒(上)
多執行緒:
1.兩種建立方式
:
1.1.繼承Thread類:
1.1.1建立方法:
寫一個繼承於Thread類的子類;重寫run方法;建立本類的物件;用物件呼叫start方法。這樣四步驟就建立了多執行緒。
例如:
```java
//1.寫一個繼承於Thread類的子類
public class ThreadThreadTest extends Thread{
//2.重寫run方法
@Override
public void run() {
//順便寫一個氣泡排序
int arr[] = new int[]{10,2,-20,50,5,30};
System.out.println("排序前為:"+ Arrays.toString(arr));
for(int i =0;i<arr.length-1;i++){
for(int j = 0;j<arr.length-i-1;j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println("排完序後為:"+ Arrays.toString(arr));
}
public static void main(String[] args) {
//3.建立本類的物件
ThreadThreadTest ttt = new ThreadThreadTest();
//4.呼叫start方法
ttt.start();
}
}
## 1.1.2注意事項
①不能直接調run方法,這樣不能啟動執行緒
②需要另外一個執行緒時需要重新new物件去調執行緒(呼叫相同的方法),在繼承類這裡就是要重複建立執行緒。在這裡使用多執行緒就需要使用類建立多物件。
③因為這裡建立的物件可能不止一個,所以如果共享資料的建立物件時就建立了多個那麼就造成了沒有共享資料,大家自己都是自己的資料,所以這時可以把共享的資料用static寫成靜態變數,這樣多個執行緒就可以共享同一個資料了。用static共享一份資料,但是有執行緒安全問題,後面會講解決執行緒安全問題。
繼承的方式解決同步方法要慎用(因為監視器為this,可能不唯一要慎用。)
1.1.3給執行緒命名:
Thread.current方法就可以使用自定義的名字。
## 1.2實現Runnable介面:
建立多執行緒的方式二:實現Runnable介面
建立一個實現Runnable介面的類;重寫run方法;建立實現類的物件;建立Thread類的物件,並把實現類的物件作為引數放入建立的Thread中作為實參;用Thread的物件呼叫start方法。使用這五部既可以建立用實現Runnable的介面的方式建立多執行緒。
```java
//1.建立類實現runnable介面
class MThread implements Runnable{
//2.重寫run方法
@Override
public void run() {
int arr[] = new int[]{10,5,62,-12,3,96,78,50};
System.out.println("排序前:"+ Arrays.toString(arr));
for(int i = 0;i<arr.length-1;i++){
for(int j =0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Thread.currentThread().getName()+"排序後:"+Arrays.toString(arr));
}
}
public class ThreadTest {
public static void main(String[] args) {
//3.建立實現類的物件
MThread mt = new MThread();
//4.將實現類的物件作為引數傳遞到Thread類的構造器中,建立Thread類的物件
Thread th1 = new Thread(mt);//此時的執行緒為th1(誰start誰就是執行緒)
th1.setName("執行緒1:");
//5.用Thread類呼叫start方法(①啟動執行緒;②呼叫run方法---》呼叫了runnable中target的run方法)
th1.start();
//在啟動一個執行緒(共用一個物件)
Thread th12= new Thread(mt);//此時的執行緒為th1(誰start誰就是執行緒)
th12.setName("執行緒2:");
th12.start();
}
}
1.3、比較兩種建立執行緒的方式
在開發中,優先使用實現Runnable介面的方式
主要有兩種原因:1.實現的方式沒用類的單繼承性;
2.實現的方式更適合來處理多個執行緒共享資料的情況。
對於兩者而言:聯絡:public class Thread implements Runnable
相同點:兩種方式都需要重寫run(),將執行緒要執行的邏輯宣告在run中。
相關文章
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- 多執行緒和多執行緒同步執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- 多執行緒爬蟲實現(上)執行緒爬蟲
- a、多執行緒執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- Java多執行緒之執行緒中止Java執行緒
- Android多執行緒之執行緒池Android執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- kuangshenshuo-多執行緒-執行緒池執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- 多執行緒之手撕執行緒池執行緒
- java多執行緒9:執行緒池Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- 執行緒池建立執行緒的過程執行緒
- 執行緒以及多執行緒,多程式的選擇執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- Java多執行緒(一)多執行緒入門篇Java執行緒
- 多執行緒,多程式執行緒
- 多執行緒,執行緒類三種方式,執行緒排程,執行緒同步,死鎖,執行緒間的通訊,阻塞佇列,wait和sleep區別?執行緒佇列AI
- Java 多執行緒共享模型之管程(上)Java執行緒模型
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 使用委託開啟多執行緒(多執行緒深入)執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- 多執行緒(五)---執行緒的Yield方法執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- C#多執行緒(6):執行緒通知C#執行緒
- 【Java】【多執行緒】執行緒池簡述Java執行緒
- Java多執行緒-執行緒池的使用Java執行緒