更新時間:2021-06-23 12:52:10 來源:動力節點 瀏覽1381次
基本概念
多任務:同一時刻運行多個程序的能力。每一個任務稱為一個線程。可以同時運行一個以上線程的程序稱為多線程編程。
Java編寫程序都運行在Java虛擬機(JVM)中,在JVM的內部,程序的多任務是通過線程來實現的。每用java命令啟動一個java應用程序,就會啟動一個JVM進程。在同一個JVM進程中,有且只有一個進程,就是它自己。在這個JVM環境中,所有程序代碼的運行都是以線程來運行。
一般常見的Java應用程序都是單線程的。比如,用java命令運行一個最簡單的HelloWorld的Java應用程序時,就啟動了一個JVM進程,JVM找到程序程序的入口點main(),然后運行main()方法,這樣就產生了一個線程,這個線程稱之為主線程。當main方法結束后,主線程運行完成。JVM進程也隨即退出 。
對于一個進程中的多個線程來說,多個線程共享進程的內存塊,當有新的線程產生的時候,操作系統不分配新的內存,而是讓新線程共享原有的進程塊的內存。因此,線程間的通信很容易,速度也很快。不同的進程因為處于不同的內存塊,因此進程之間的通信相對困難。
進程是指一個內存中運行的應用程序,每個進程都有自己獨立的一塊內存空間,一個進程中可以啟動多個線程。比如在Windows系統中,一個運行的exe就是一個進程。
線程是指進程中的一個執行流程,一個進程可以運行多個線程。比如java.exe進程可以運行很多線程。線程總是輸入某個進程,進程中的多個線程共享進程的內存。
Java中線程是指java.lang.Thread類的一個實例或線程的執行。使用java.lang.Thread或java.lang.Runnable接口編寫代碼定義、實例化、啟動新線程。
Java中每個線程都有一個調用棧,即使不在程序中創建任何新的線程,線程也在后臺運行。main()方法運行在一個線程內,稱為主線程。一旦創建一個新的線程,就產生一個新的調用棧。
線程分為兩類:用戶線程和守候線程。當所有用戶線程執行完畢后,JVM自動關閉。但是守候線程卻不獨立與JVM,守候線程一般是有操作系統或用戶自己創建的。
定義線程
1.擴展java.lang.Thread類以及實現java.lang.Runnable接口。
此類中有run()方法,public void run(),如果該線程是獨立的Runnable運行對象構造的,則調用該Runnable對象的run()方法;否則,該方法不執行任何操作。Thread的子類也應該重寫該方法。
實例化線程
1.如果是擴展了java.lang.Thread類的線程,則直接調用new即可。
2.如果是實現了jav.lang.Runnable接口的類,則調用Thread的構造方法:
Thread(Runnable target)
Thread(Runnable target,String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
啟動線程
在線程的Thread對象上調用start()方法,而不是run()或別的方法。
在調用start()方法之前,線程處于新狀態中,新狀態有一個Thread對象,但沒有一個真正的線程。
在調用start()方法之后,發生了一系列復雜的事情:
啟動新的執行線程(具有新的調用棧);
該線程從新狀態轉移到可運行狀態;
當該線程獲得執行機會時,其目標run()方法將運行。
注意事項
1.獲取當前線程的對象的方法是:Thread.currentThread();
2.當線程目標run()方法結束時該線程完成。
3.一旦線程啟動,它就永遠不能再重新啟動。只有一個新的線程可以被啟動,并且只能一次。一個可運行的線程或死線程可以被重新啟動。
4.線程的調度是JVM的一部分,在一個CPU的機器上上,實際上一次只能運行一個線程。一次只有一個線程棧執行。JVM線程調度程序決定實際運行哪個處于可運行狀態的線程。眾多可運行線程中的某一個會被選中做為當前線程。可運行線程被選擇運行的順序是沒有保障的。
5.盡管通常采用隊列形式,但這是沒有保障的。隊列形式是指當一個線程完成“一輪”時,它移到可運行隊列的尾部等待,直到它最終排隊到該隊列的前端為止,它才能被再次選中。事實上,我們把它稱為可運行池而不是一個可運行隊列,目的是幫助認識線程并不都是以某種有保障的順序排列一個隊列的事實。
6.盡管我們沒有無法控制線程調度程序,但可以通過別的方式來影響線程調度的方式。
以上就是動力節點小編介紹的"線程的基本概念",希望對大家有幫助,想了解更多可查看Java多線程編程技術文檔,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習