第一章 Java多線程技能
Thread類
核心方法較多
如: 線程的啟動,
如何使線程暫停,
如何使線程停止,
線程的優先級,
線程安全相關的問題
1.1進程和線程的概念及線程的優點
多線程的優點:可以最大限度地利用CPU的空閑時間來處理其他的任務
單任務環境(同步) 排隊等待
多任務(多線程) 異步 大大利用CPU
1.2使用多線程
一個進程正在運行時至少會有1個線程在運行
main的線程在執行main()方法中的代碼
public class Test { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); } }
1.2.1繼承Thread類
實現多線程編程的方式:1.繼承Thread類,2.實現Runnable接口
Thread類實現了Runnable接口,之間具有多態關系,不支持多繼承,所以為了多繼承,可以一邊實現一邊繼承
class Thread implements Runnable
1.繼承Thread
2.重寫run()方法,寫線程要執行的任務的代碼
public class MyThread extends Thread{ @Override public void run() { // TODO Auto-generated method stubsuper.run();
System.out.println("MYthread"); } }
運行代碼類如下
public class Run { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); System.out.println("運行結束"); } }
線程是一個子任務,CPU以不確定的方式或者以隨機的時間來調用線程中的run方法,所以就會出現先運行結束再打印MyThread的情況
註意事項:如果多次調用start(方法會出現異常)
演示線程的隨機性
Thread類中的Start()方法通知"線程規劃期"此線程已經準備就緒,等待調用線程的Run()方法.這個過程其實就是讓系統安排一個時間來調用Thread類中的Run()方法,也就是使線程的到運行,啟動線程具有異步執行的效果
如果調用thread.run()就不是異步,而是同步,那麽此線程並不交給"線程規劃器"來處理,而是由main主線程來調用run()方法,也就是必須等run(),方法中的代碼執行完後才可以執行後面的代碼
異步執行效果圖
註意事項:執行Start()方法的順序不代表啟動線程的順序,線程啟動順序與start()無關
1.2.1實現Runnable接口
如果創建的線程已經有父類了 ,則不能繼承Thread類,則通過實現Runnable接口
第一章 Java多線程技能