一 . 使用多線程的優勢多線程
能夠在同一時間內運行更多不一樣種類的任務dom
注: 多線程是異步的,即代碼順序不必定是執行順序,線程被調用的時機是隨機的異步
二 . 實現多線程的方法ide
實現多線程的方法主要有兩種:測試
1 . 繼承Thread類spa
2 . 實現Runnable接口線程
3 . Thread類的結構繼承
Thread類的結構以下:接口
public class Thread implements Runnableget
從上面能夠看出Thread實現了Runnable,他們之間存在多態關係 因此在試用Thread 類建立多線程時,最大的缺點是不支持多繼承,由於JAVA的特色是單繼承 因此爲了實現多繼承,能夠在建立線程時用實現Runnable接口的方式,一邊實現,一邊繼承 線程的兩種實現方式沒有本質區別,在工做時性質都是同樣的
三 . 建立多線程
1 . 繼承Thread類
建立一個自定義的線程類, 該類繼承自Thread, 而且重寫run()方法, 在run()方法中實現該線程要執行的任務代碼. 如:
public class MyThread extends Thread{
@Override
public void run(){
super.run();
System.out.println("This is my first thread !");
}
}
運行該線程:
public class run{
public static void main(String[] args){
MyThread myThread = new MyThread();
myThread.run();
System.out.println("Invoke the thread end !");
}
}
運行結果示意:
注: 此處的運行狀況是按照順序執行的,可是調用線程進行操做時,執行的順序不必定 若是屢次調用run()方法,會報出錯誤. 線程時一個子任務,CPU以不肯定的方式,或者說是隨機時間調用線程中的run()方法,因此有可能會出現執行順序不必定的狀況
2 . 線程執行順序的不必定性
建立一個類Mythread:
public class MyThread extends Thread { @Override public void run() { try { for (int i = 0; i < 5; i++) { int time = (int) (Math.random() * 1000); Thread.sleep(time); System.out.println("run=" + Thread.currentThread().getName()); } } catch (Exception e) { e.printStackTrace(); } } }
建立一個測試類
public class Test { public static void main(String[] args) { try { MyThread myThread = new MyThread(); myThread.setName("myThread"); myThread.start(); for (int i = 0; i < 5; i++) { int time = (int) (Math.random() * 1000); Thread.sleep(time); System.out.println("main=" + Thread.currentThread().getName()); } } catch (Exception e) { e.printStackTrace(); } } }
運行結果
注:若是存在多個線程,在調用start()方法時,start()方法的順序一樣不表明線程的啓動順序