建立多執行緒的兩種方法
阿新 • • 發佈:2018-11-13
建立執行緒的方法:
- 一種方法是將類宣告為
Thread
的子類。該子類應重寫Thread
類的run
方法。接下來可以分配並啟動該子類的例項。public class MyThread extends Thread{ @Override public void run() { super.run(); //繼承Thread,並重寫run方法,run函式裡寫要執行的程式碼 for (int i = 0; i < 100; i++) { System.out.println("aaaaaa"); } } } //主執行緒 public static void main(String[] args) { MyThread myThread=new MyThread(); //建立執行緒子類物件 myThread.start(); //啟動執行緒 for (int i = 0; i < 100; i++) { //這裡的i要足夠大 System.out.println("主執行緒"); } }
- 繼承Thread : public class MyThread extends Thread
- 重寫run()方法
- 將要執行的程式碼放在run()方法中
- 建立Thread的子類物件: MyThread myThread=new MyThread();
- 開啟執行緒: myThread.start();下面是例項
-
另一種方法時宣告實現
Runnable
介面的類。該類然後實現run
方法。然後可以分配該類的例項,在建立Thread
時作為一個引數來傳遞並啟動。class MyRunnable implements Runnable{ //1.定義一個類實現Runnable public static void main(String[] args) { MyRunnable myRunnable=new MyRunnable(); //4.建立Runnable的子類物件 Thread thread=new Thread(myRunnable); //5.將其當做引數傳遞給Thread的建構函式 thread.start(); //6.開啟執行緒 for (int i = 0; i < 100; i++) { System.out.println("主執行緒"); } } @Override public void run() { //2.重寫run方法,3.將要執行的程式碼寫在run方法中, for (int i = 0; i < 100; i++) { System.out.println("aaaaaa"); } } }
-
兩種方法的區別:
-
繼承Thread類:由於子類重寫了Thread類的run方法,當呼叫start時,直接呼叫子類的run()方法。
-
實現Runnable:Thread建構函式中傳入了Runnable的引用,成員變數記住了它,start()呼叫run()方法時內部判斷Runnable的引用是否為空,不為空時:編譯看的是Runnable的run(),執行看的是子類的run()方法。
-
好處與弊端:
底層都是由Thread的start()方法呼叫run實現的,所以Thread方法更直接,程式碼更簡單。
但是Thread 方法是繼承之後才能實現的,而Java是單繼承,當類已經繼承了其他類就需要使用第二種方法了(Runnable),應為Java介面可以多繼承
-
-
內部匿名類實現兩種方法(常用):
//內部匿名類時實現繼承Thread方法 new Thread(){ //1. new Thread(){} 繼承Thread類, public void run(){ //2. 重寫run方法 } }.start(); //內部匿名類時實現Runnable new Thread(new Runnable() { //將Runnable的子類物件當做引數傳遞Thread的構造方法 @Override public void run() { //重寫run方法 } }).start();