包: 對類文件進行分類管理;給類提供多層命名(名稱)空間;寫在程式文件的第一行;類名的全稱是 包名.類名包也是一種封裝形式; package protected必須是成為其子類,才能繼承import導入指定包中的類用的 導包的原則:用到哪個導哪個;作用:為了簡化類名書寫; jar包:Java的壓縮包 ...
包:
對類文件進行分類管理;給類提供多層命名(名稱)空間;
寫在程式文件的第一行;
類名的全稱是 包名.類名
包也是一種封裝形式;
package
protected必須是成為其子類,才能繼承
import導入指定包中的類用的
導包的原則:用到哪個導哪個;
作用:為了簡化類名書寫;
jar包:Java的壓縮包;
多線程:
進程:正在進行中的程式;
線程:就是進程中一個負責程式執行的控制單元(執行路徑)
一個進程中可以多執行路徑,稱之為多線程;
一個進程中至少有一個線程;
開啟多個線程是為了同時運行多個代碼;
每一個線程都有運行的內容,這個內容稱為這個線程執行的任務;
多線程好處:解決了多部分同時運行的問題;
多線程弊端:線程太多回到的效率降低;
其實應用的執行都是CPU進行著高速的轉換,這個切換是隨機的;
JVM啟動時就啟動了多個線程,至少有兩個線程分析的出來;
1、執行main函數的線程;
該線程的代碼都在主函數中;
2、負責垃圾回收的線程;
垃圾回收器中;
如何創建一個線程呢?
創建線程方式一:繼承Thread類。
步驟:
1,定義一個類繼承Thread類。
2,覆蓋Thread類中的run方法。
3,直接創建Thread的子類對象創建線程。
4,調用start方法開啟線程並調用線程的任務run方法執行。
可以通過Thread的getName獲取線程的名稱 Thread-編號(從0開始)
主線程的名字就是main。
創建線程的目的是為了開啟一條執行路徑,去運行指定的代碼和其他代碼實現同時運行。
而運行的指定代碼就是這個執行路徑的任務。
jvm創建的主線程的任務都定義在了主函數中。
而自定義的線程它的任務在哪兒呢?
Thread類用於描述線程,線程是需要任務的。所以Thread類也對任務的描述。
這個任務就通過Thread類中的run方法來體現。也就是說,run方法就是封裝自定義線程運行任務的函數。
run方法中定義就是線程要運行的任務代碼。
開啟線程是為了運行指定代碼,所以只有繼承Thread類,並覆寫run方法。
將運行的代碼定義在run方法中即可。
線程有名字:通過Thread的getName方法來獲取
線程的狀態:
CPU的執行資格:等待執行;
CPU的執行權:正在執行
臨時阻塞狀態:具備執行資格,沒有執行權,只有正在運行的有執行權;只有一個有執行權;
創建線程的第二種方式:實現Runnable介面。
1,定義類實現Runnable介面。
2,覆蓋介面中的run方法,將線程的任務代碼封裝到run方法中。
3,通過Thread類創建線程對象,並將Runnable介面的子類對象作為Thread類的構造函數的參數進行傳遞。
為什麼?因為線程的任務都封裝在Runnable介面子類對象的run方法中。
所以要線上程對象創建時就必須明確要運行的任務。
4,調用線程對象的start方法開啟線程。
實現Runnable介面的好處:
1,將線程的任務從線程的子類中分離出來,進行了單獨的封裝。
按照面向對象的思想將任務的封裝成對象。
2,避免了java單繼承的局限性。
所以,創建線程的第二種方式較為常用。