java基礎———第十一天

關鍵字: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; 
	}
}


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