JavaSE基礎筆記十二

第十一章 多線程


  1. 理解程序、進程、線程的概念

程序可以理解爲靜態的代碼。

進程可以理解爲執行中的程序。

線程可以理解爲進程的近一步細分,程序的一條執行路徑。


2.如何創建java程序的進程(重點)

方式一:繼承於Thread類

①創建一個繼承於Thread的子類

②重寫Thread類的run()方法,方法內實現此子線程要完成的功能

③創建一個子類的對象

④調用線程的start():啓動此線程,調用相應的run()方法

⑤一個線程只能夠執行一次start

方式二:實現Runnable接口

①創建一個實現Runnable接口的子類

②重寫Thread類的run()方法,方法內實現此子線程要完成的功能

③創建一個子類的對象

④創建一個Thread對象,並把子類對象作爲形參傳遞進去,調用線程的start():啓動此線程,調用相應的run()方法


兩種方式的對比:

聯繫:class Thread implements Runnable  

實現的方式較好1.解決了單繼承的侷限性 2.若多個線程有共享數據,建議使用實現方式,同時,共享數據所在的類可作爲Runnable接口實現的類

線程裏常用的方法:start() run() currentThread() getName() setName(String name) yied() join() sleep() isAlive() getPriority() setPriority(int i);

                                  wait() notify() notifyAll()


3.線程的生命週期

新建 就緒 運行 阻塞 死亡


4.進程的同步機制(重點)

前提:如果我們創建多個線程,存在着共享數據,那麼就有可能出現線程的安全問題:當其中一個線程操作共享數據時,還未操作完成,另外的線程就參與進來,導致對共享數據的操作出現問題

解決方式:要求一個線程操作共享數據時,只有當其完成操作完成共享數據,其它線程纔有機會執行共享數據

方式一:同步代碼塊

synchornized(同步監視器){

//操作共享數據的代碼

}

1.同步監視器:俗稱鎖,任何一個類的對象都可以充當鎖,想要保證線程安全,必須要求所有的線程共用同一把鎖

2.使用實現Runnable接口的方式創建多線程的話,同步代碼塊中的鎖,可以考慮是this,如果使用繼承Thread類的方式慎用this

3.共享數據:多個線程需要共同操作的變量。要明確哪部分是操作共享數據的代碼。


方式二:同步方法:將操作共享數據的方法聲明爲synchornized

如:public synchronized void show(){//操作共享數據的代碼}

1.對於非靜態方法而言,使用同步的話,默認鎖爲:this。如果使用繼承的方式實現多線程的話,慎用

2.對於靜態的方法,如果使用同步,默認鎖爲:當前類本身


總結:釋放鎖:wait();

           不釋放鎖:sleep() yied() suspend()(過時,可能導致死鎖)

死鎖:不同的線程分別佔用對方需要的同步資源不放棄,都在等待對方放棄自己需要的同步資源,就形成了線程的死鎖


5.進程的通信 如下的三個方法必須使用在同步代碼塊或同步方法中

wait():當在同步中執行到此方法,則此線程“等待”,直至其他線程執行notify()的方法,將其喚醒,喚醒後繼續其wait()後的代碼

notify() notifyAll():在同步中,執行到此方法,則喚醒其他的某一個或所有的被wait()的線程



第十二章 java常用類

1.String類:是一個final類,代表不可變的字符序列


String類與基本數據類型、包裝類;與字符數組、字節數組的轉化

①字符串--->基本數據類型、包裝類:調用相應的包裝類的parseXxx(String str);

②基本數據類型、包裝類--->字符串:調用字符串的重載的vauleOf()方法

③字符串--->字節數組:調用字符串的getBytes()

④字節數組--->字符串:調用字符串的構造器

⑤字符串--->字符數組:調用字符串的toCharArray();

⑥字符數組--->字符串:調用字符串的構造器

⑦String--->StringBuffer:使用StringBuffer的構造器 newStringBuffer(StringBuffer str)

⑧StringBuffer--->String:使用StringBuffer的toString方法


   Stringbuffer類:可變的字符序列

   Stringbuild:可變的字符序列,jdk5.0新加,效率高,線程不安全

常用方法:添加append() 刪除delete(int startIndex,int endIndex) 修改setCharAt(int n,char ch) 查詢charAt(int index) 插入inset(int index,String str) 反轉reverse() 長度length()


2.時間、日期類

①System類:currentTimeMillis():返回當前時間的long型值,此long值是從1970年1月1日0點0分00秒開始到當前的毫秒數。

                         常用來計算時間差。

②Date類:java.util.Date

   Date d = new Date();//返回當前時間的Date:Mon May 12 15:17:01 CST 2014

   Date d1 = new Date(15231512541241L);//返回形參處此long型值對應的日期

③SimpleDateFormat :java.text.SimpleDateFormat

   格式化:日期---->文本 使用SimpleDateFormat的format()方法

   解析:文本--->日期 使用SimpleDateFormat的parse()方法

④Calendar:日曆類

獲取實例:Calendar c = Calendar.getInstance();

                  get()/set()/add()/date  getTime()

3.Math類  瞭解

4.BigInteger BigDecimal類    瞭解



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