多執行緒學習(一):多執行緒的兩種實現方式
阿新 • • 發佈:2019-01-07
程序和執行緒
程序是受作業系統管理的基本執行單元。
執行緒是在程序中獨立執行的子任務。
多執行緒的優點
使用多執行緒技術後,可以在同一時間內執行更多不同種類的任務。
單執行緒是同步執行任務,多執行緒是非同步執行任務。
多執行緒的使用方式
1:繼承Thread
2:實現Runnable介面
上述兩種實現沒有本質的區別,使用繼承Thread的方式只能單根繼承,而實現Runnable的方式可以實現多繼承。
例一
程式碼
public class MyThread extends Thread{ @Override public void run() { super.run(); System.out.println("子執行緒名:"+Thread.currentThread().getName()); } public static void main(String[] args) { new MyThread().start(); System.out.println("主執行緒名:"+Thread.currentThread().getName()); } }
執行結果
上述程式碼列印執行緒名,子執行緒會呼叫run方法,主執行緒列印的名字為“main”,注意這個main不是方法名。在多執行緒時,程式碼的執行結果和程式碼執行順序是無關的。
執行緒的隨機特性
例二
程式碼
public class MyThread02 extends Thread{ @Override public void run() { try { for(int i=0;i<10;i++){ int time=(int)Math.random()*1000; Thread.sleep(time); System.out.println("子執行緒="+Thread.currentThread().getName()); } } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { new MyThread02().start(); try { for(int i=0;i<10;i++){ int time=(int)Math.random()*1000; Thread.sleep(time); System.out.println("主執行緒="+Thread.currentThread().getName()); } } catch (InterruptedException e) { e.printStackTrace(); } } }
執行結果
上述程式碼使用隨機數使執行緒得到掛起的效果,子執行緒和主執行緒隨機執行,
體現CPU在執行執行緒中的不確定性。
start()
start方法通知“執行緒規劃器”此執行緒已經準備就緒,等待呼叫執行緒物件的run()方法,使執行緒得到執行。注意start()方法會自己呼叫run()方法執行,但如果直接呼叫run()方法,那麼run則只是一個普通方法。
注意:start()方法的順序不代表執行緒啟動的順序。
例三
程式碼
public class MyThread03 extends Thread{ private int i; public MyThread03(int i) { this.i=i; } @Override public void run() { System.out.println(i); } public static void main(String[] args) { new MyThread03(1).start(); new MyThread03(2).start(); new MyThread03(3).start(); new MyThread03(4).start(); new MyThread03(5).start(); new MyThread03(6).start(); new MyThread03(7).start(); new MyThread03(8).start(); new MyThread03(9).start(); new MyThread03(10).start(); } }
執行結果
實現Runnable介面
例四
public class MyRunnable01 implements Runnable{
@Override
public void run() {
System.out.println("子執行緒:"+Thread.currentThread().getName());
}
public static void main(String[] args) {
Thread thread=new Thread(new MyRunnable01());
thread.start();
}
}
可以給Thread物件傳入一個實現Runnable介面的方法。