【騏程】多執行緒(上)
多執行緒:
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執行緒
- 執行緒與多執行緒執行緒
- 多執行緒-執行緒排程及獲取和設定執行緒優先順序執行緒
- VC多執行緒 C++ 多執行緒執行緒C++
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 多執行緒-執行緒控制之中斷執行緒執行緒
- 多執行緒爬蟲實現(上)執行緒爬蟲
- 多執行緒脫離狀態 + 排程執行緒
- 多執行緒之初識執行緒執行緒
- Java多執行緒-執行緒中止Java執行緒
- Java多執行緒——執行緒池Java執行緒
- 多執行緒-執行緒概述等執行緒
- Java併發和多執行緒3:執行緒排程和有條件取消排程Java執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- 多執行緒系列(二):多執行緒基礎執行緒
- 多執行緒-執行緒控制之守護執行緒執行緒
- a、多執行緒執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- java多執行緒9:執行緒池Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- kuangshenshuo-多執行緒-執行緒池執行緒
- iOS多執行緒之執行緒安全iOS執行緒
- Java多執行緒——守護執行緒Java執行緒
- JavaThread多執行緒執行緒池Javathread執行緒
- Java多執行緒16:執行緒組Java執行緒