今天學完IT十八掌第九天java基礎課程:
學習內容:
創建線程方式
-----------------
1.Thread
class Demo extends Thread
{
public void run()
{
}
}
2.Runnable{public void run();}
class Man extends Person implements Runnable{
public void run(){
...
}
}
new Car().start();
new Thread(new Man()).start();
實現方式和繼承方式的區別:
1,實現方式避免了java中單繼承的侷限性。
2,實現方式將代碼和數據分離,體現了面向對象的設計思想
3,實現方式可以保證多個線程操作同一數據,提高代碼的健壯性。
生產消費問題:
蜜蜂和熊:
蜜蜂和熊爲兩個線程類,操作共享資源類蜂蜜類。
關鍵在於操作蜂蜜時,代碼應該同步,避免出現多線程的安全問題。
其次,在生產和消費時,應該分離,分別使用wait和notify來控制。
wait()和notify必須用鎖旗標對象來調用,也就是說必須在同步中使用,這個鎖可以是Object類的任何子類對象,具備的是標記功能。
wait()方法使得當前線程對象進入等待隊列,放棄cpu執行權,並且釋放鎖,具備cpu執行權的線程可以拿到鎖。會拋異常
notify()方法喚醒等待隊列中的一個線程,具備cpu執行權的爭奪。
notifyAll()方法喚醒等待隊列中的所有線程,爭奪cpu執行權。
wait()和sleep()方法區別與聯繫:
1,wait()方法必須在同步中使用,通過鎖旗標調用,sleep()可以在線程的任何位置,通過線程對象調用。
wait()方法是Object當中的,而sleep()方法是Thread類當中的。
2,wait( )方法和sleep()方法都會使得當前線程休眠,但是wait()方法會釋放鎖,而sleep()方法不會釋放鎖。會等待當前線程休眠完畢繼續執行。
3,調用wait()方法會使當前線程進入等待隊列,知道鎖對象調用notify()或者notifyAll()纔會被喚醒。
eclipse
---------------
alt + / //代碼輔助
alt + 上箭頭 //向上移動一行
alt + 下箭頭 //向上移動一行
alt + shift + 上箭頭 //向上複製一行
alt + shift + 下箭頭 //向下複製一行
ctrl + D //刪除一行
ctrl + / //單行註釋
ctrl + shift + / //多行註釋
ctrl + shift +f //格式化代碼
alt + shift +s //調出source菜單項
ctrl +O //調出對應的詳細信息
String
-----------------
1. == //判斷是否是同一對象。判斷對象的內存地址。
2. equals //是判斷兩個對象內容是否相同。
String類中重寫了Object類中的equals方法,用於比較字符串的內容是否相同。
split(String reg); //按照指定的字符串進行拆分,返回值數組。
str.split(",") 按逗號切割字符串,返回對應類型的數組。
例如: String str = "saf,fdsa,fsald";
String [] ss = str.split(",");
substring(int start); //取子串操作,指定起始索引之後的所有字符
substring(int start,int end); //取子串操作,指定起始索引和結束索引之間的全部字符,
//包含起始索引,不含結尾索引。[a,b)屬於半開半閉區間。
基本數據類型對象包裝類
---------------------------------------------
byte Byte //包裝類
short Short
int Integer
long Long
float Float
doule Double
boolean Boolean
char Character
byte b = 127 ;
Byte b = new Byte(127);
遇到的問題:
1,多線程生產消費問題
2,eclipse使用,debug使用
3,String類的方法
需要幫助的問題:
1,eclipse調試代碼,工具使用
2,多線程總結