標籤:
多線程
實現Runnable介面比繼承Thread類所具有的優勢:
1):適合多個相同的程式碼的線程去處理同一個資源
2):可以避免java中的單繼承的限制
3):增加程式的健壯性,代碼可以被多個線程共用,代碼和資料獨立。
線程的生命週期
線程被建立並啟動以後要經曆五種狀態,分別是建立(New)、就緒(Runnable)、運行(Running)、阻塞(Blocked)和死亡(Dead)。
建立:使用關鍵字new建立一個線程後,處於建立狀態,此時僅由虛擬機器為其分配記憶體並初始化成員變數,程式不會執行線程執行體。
就緒:當線程對象調用start()方法後,該線程處於就緒狀態,虛擬機器為其建立調用棧和程式計數器,但是此時線程並沒有運行,只是表示線程可以運行了。運行:當處於就緒狀態的線程獲得了CPU,開始執行run方法,則該線程處於運行狀態。阻塞:當發生線程調用sleep方法、阻塞式IO方法、suspend方法、等待通知(notify),線程將近阻塞狀態。阻塞狀態在合適的時候會重新進入就緒狀態。死亡:線程會以以下三種方式結束,然後就處於死亡狀態,run方法執行完成、線程拋出未捕獲的異常、直接跳躍stop方法結束進程。
線程的控制isAlive():測試線程是否處於活動狀態isDaemo():測試進程是否為守護進程join():等待該進程終止sleep():在指定的毫秒數內讓正在執行的線程休眠,該線程不丟失任何監視器的所屬權yield():暫停當前正在執行的線程對象,並執行其他線程,它是將線程轉入就緒狀態setPriority(int newPriority):更改線程的優先順序 線程的通訊Java為了避免輪詢檢測,通過wait()、notify()和notifyAll()方法實現進程內通訊的機制。 wait():告訴調用線程放棄監控器進入等待模式直到其他線程進入同一監控器並調用notify()方法。notify():喚醒在此同步器上等待的單個線程notifyAll():喚醒在此同步器上等待的所有線程 JAVA系統
IO流的分類
- 根據處理資料類型的不同分為:字元流和位元組流
- 根據資料流向不同分為:輸入資料流和輸出資料流
- 根據資料功能不同分為:節點流和處理流
只要是處理純文字資料,就優先考慮使用字元流;除此之外都使用位元組流。
物件流程:以對象為單位傳輸資料。使用類ObjectInputStream和ObjectOutputStream實現,以FileOutputStream和FileInputStream類進行流的中轉儲存。
對象的序列化:把堆中的對象轉化為位元據的形式輸出。
對象的還原序列化:把位元據還原成堆中的對象。
序列化標示關鍵字:Serializable
不能被序列化的關鍵字:transient
序列化:就是只把一個對象序列化成一個位元組流,用於網路傳輸或者持久化。
JAVA映像介面編程
在java中有ATW和Swing兩套組件用於支援圖形化使用者介面編程。
ATW是最早出現的,但是過於依賴作業系統,有很大弊端,AWT 是依靠本地方法來實現其功能的,所以通常把AWT組件稱為重量級組件。
Swing是在ATW之上開發的。完全有java代碼編寫,不依賴作業系統,可以自己調節外觀,使得程式員編寫程式更方便。
Swing的GUI(圖形化使用者介面)是由容器和組件組成,容器是放置組件的。
布局管理器
FlowLayout: 組件在一行中從左至右水平排列。
BorderLayout:北、南、東、西、中。
GridLayout:以行和列的網格形式安排組件
BoxLayout:更複雜、功能更強的網格布局
事件驅動編程
事件:描述發生了什麼的對象。
存在各種不同類型的事件類別用來描述各種類型的使用者互動。
事件來源:事件的產生器。
事件處理器:接收事件、解釋事件並處理使用者互動的方法
java基礎四