包
關鍵字:package(包)關鍵字:import(導入)
包名命名規範:所有字母小寫。
如何創建:編譯時在命令行: javac -d . 文件名.java("."表示當前路徑,也可自定義文件路徑)
包&包之間相互訪問的常見錯誤
1.當包中的類訪問到另一個包中的類的時候要用全名稱:包名.類名2.當一個包中的類訪問到另一個包中的類的時候要指定classpath。
3.當一個包中的類訪問到另一個包中的類的時候,類名要用public修飾,要使用的方法也需要用public修飾。
權限修飾符:protected(保護權限)是爲其他包中的子類提供的一種權限。
jar包
作用:將class文件進行打包陳jar.exe文件。
創建:進入class文件加下,命令行操作:jar -vcf 文件名.jar 包名
多線程
進程:當前正在執行的程序,代表一個應用程序在內存中的執行區域。線程:是進程中的一個執行控制單元,執行路徑。
單線程:一個進程中只有一個執行路徑。
多線程:一個進程中有多個執行路徑。
好處:讓多部分代碼同時執行,提高了效率。
創建方式一:繼承Thread類
步驟:
1.子類覆蓋父類中的run方法,將線程運行代碼存放在run中。
2.建立子類對象的同時被創建。
3.通過調研start方法開啓線程。
例:
class ThreadDemo {
public static void main(String[] args) {
Demo d = new Demo();
//開啓線程
d.start();
}
}
//通過繼承Therad 創建。
class Demo extends Thread {
public void run() {
System.out.println("覆蓋Thread中的
}
}
特點:1.用該方法創建的線程對象會導致每一個對象中都存儲一份屬性數據,無法共享,雖可以加載靜態解決,但生命週期過長。
2.如果一個類明確了自己的父類,那麼它就不可以在繼承Thread。
創建方式二:實現Runnable接口
步驟:
1.子類覆蓋接口中的run方法。
2.創建子類對象。
3.通過Thread類創建線程,並實現了以Runnable接口的子類對象作爲參數類型傳遞給Thread類的構造函數。
4.Thread類對象調用start方法,開啓線程。
例:
class ThreadDemo {
public static void main(String[] args) {
Threa t = new Threa();
Thread d0 = new Thread(t);
Thread d1 = new Thread(t);
Thread d2 = new Thread(t);
d0.start();
d1.start();
d2.start();
}
}
//通過實現Runnable
class Threa implements Runnable {
public void run() {
System.out.println("覆蓋Runnable中的run方法")
}
}
特點:1.之所以要將Runable接口的子類對象傳遞給Thread類的構造函數,是因爲線程對象在創建時,必須明確要運行的run方法
而這個run方法定義在了Runnable接口的子類中,所以要將該run方法所屬的對象傳遞給Thread類的構造函數。讓線程對象
一建立,就知道運行哪個run方法。
2.因爲該方式是定義一個Runnable接口的子類對象,可以被多個線程所操作實現了數據的共享。
3.避免了單繼承的侷限性。
線程的五種狀態
注:臨時阻塞時具備了執行資格,但沒有獲取資源的特殊狀態。
多線程的安全問題
概況:當線程中多條代碼在同時操作共享數據。
解決方式:同步機制
原理:當一條線程在操作數據時,禁止其它線程對其的操作。
同步代碼塊
格式:
synchronized(對象){
需要同步的代碼;
}
注:該對象可以是任意對象,但不能傳入匿名對象。
前提:
1.同步需要兩個或者兩個以上的的線程。
2.多線程使用的是同一個鎖(對象)。
利:解決了多線程的安全問題。
弊:耗費資源,降低了程序運行效率。
同步函數
格式:在函數上加上synchronized修飾符即可。
注:
同步函數的鎖是:this。
靜態同步函數的鎖是:類名.class。
單例設計模式:懶漢式(解決多線程下的安全隱患)
class Single {
private static Single s = null;
private Single() {}
public static Single getIntance() {
if (s == null){
synchronized (Single.class){
if (s == null){
s = new Single();
}
}
}
return s;
}
}