java自學之路----- 包 線程(1)

包(package){

1.對類文件進行分類管理

2.包與包之間進行訪問,被訪問的包中的類是public,且該類方法也要是public

3.只有繼承類的子類才能使用該類中protected修飾的方法

4.import導入包中的類,用哪個導入哪個,放在代碼第一行

}


線程{

進程與線程{

進程:正在進行的程序

線程:進程中一個負責程序執行的控制單元

1.一個進程有多個線程,即多個執行路徑

2.一個進程至少一個線程

3.多個線程是爲了同時運行多部分代碼,且每個都有獨立的運行內容

4.如果線程過多,相應的效率降低

}


創建線程的目的是爲開啓一條執行路徑,去運行指定的代碼和其他的代碼實現同事運行,而運行的指定代碼就是這個執行路徑的任務,

JVM創建的主線程任務都定義在main函數當中

Thread類是用於描述線程的,線程需要任務,所以該類也是對任務描述,通過run方法體現出來,run方法是封裝了自定義線程的任務


第一種創建線程方法{

1.定義一個類並繼承Thread

2.覆蓋run方法,把線程任務封裝進該方法

3.創建該類對象並執行start方法

}


第二種創建線程方法{

1.定義一個類,實現Runnable(一個將線程的任務進行了對象封裝的接口)

2.覆蓋run方法,將執行任務放進去

3.通過Thread類創建一個線程對象,並將實現Runnable的類的對象作爲構造函數的參數傳遞

4.調用線程對象的start方法開啓線程

}


獲取線程方法{

通過Thread類的getName方法,當繼承Thread的類創建對象就有一個名字 ,就是該線程的名字

如果想要獲得正在運行的線程的名字就需要Thread.currentThread().getName(),先獲得正在運行線程的引用再獲得該對象名字,

}


產生安全性問題{

前提:1.多個線程在操作共享的數據 2.操作共享數據的線程代碼有多條

原因:當一個線程在執行操作共享數據的多條代碼過程中,其他線程也參與了該數據的運算就導致問題的產生

}

解決辦法:通過同步代碼塊將多條語句進行封裝類似有一把鎖,當該代碼塊第一次被一線程執行的時候這個線程就有了該鎖的鑰匙,其他線程就無法獲得鑰匙

弊端:每一個線程都要判斷是否擁有該鎖的鑰匙

格式:synchronized(對象){   }       //對象---相當於這把鎖的名稱,不同的鎖對應不同的鑰匙

同步函數:public  synchronized  void show(){ }該函數的鎖爲this,

同步代碼塊的鎖爲自定義

靜態函數的鎖爲類的字節碼文件對象,可通過兩種方式獲取  1.類名.class(常用,靜態函數有可能不需要對象) 2.this.getClass()

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章