java面試--基礎4
阿新 • • 發佈:2018-12-19
流
流的分類
按方向來分:
輸入流(硬碟--記憶體)
輸出流(記憶體--硬碟)
按傳輸型別來分:
位元組流,帶有inputStream或者outputStream字眼
(常用除中文文字檔案以外的所有檔案的讀寫操作)
字元流 ,帶有Reader或者Writer字眼(常用於中文文字的傳輸)
序列化和反序列化
物件的讀寫又被叫做序列化和反序列化
序列化:將記憶體內容寫入檔案。Serialize
反序列化:將檔案內容寫入記憶體。
檔案讀寫的基本類
File Reader 類和FileWriter類分別繼承自Reader類和Writer類。 FileReader類用於讀取檔案,File Writer類用於將資料寫入檔案, 這兩各類在使用前,都必須要呼叫其構造方法建立相應的物件, 然後呼叫相應的read()或 write()方法。
執行緒
執行緒和程序
程序:是執行中一段程式,即一旦程式被載入到記憶體中並準備執行,它就是一個程序。
執行緒:單個程序中執行中每個任務就是一個執行緒。執行緒是程序中執行運算的最小單位。
一個執行緒只能屬於一個程序,但是一個程序可以擁有多個執行緒。
實現多執行緒兩種方式
繼承Thread
實現Runnable介面
執行緒的狀態
新建:新執行緒start之後並不能馬上執行,而是進入就緒狀態。 就緒:系統排程,CPU有空了 執行:run方法執行裡面的內容 死亡(銷燬):執行緒執行結束。 睡眠:thread;sleep;join 等待:wait等待/notity喚醒 生產者與消費者(作業系統), 必須由他人喚醒。 阻塞:同步(鎖)關鍵字,銀行案例,一個賬號可以再不同的地方存錢和取錢。 但是同一時刻只能有一個執行緒在操作這個賬戶。
sleep、yield和join的區別
sleep、yield:都會放棄CPU的使用權,並且時間到了自動喚醒
sleep:進入睡眠狀態後,不考慮優先順序都可以讓位
yield:進入睡眠狀態後,只會給和自己等級一樣或者更高的讓位
join:合併執行緒;變成一個執行緒從頭到尾執行(單執行緒)。專案中啟動了5個執行緒,有的時候比如電腦效率低
Wait和sleep的區別
Sleep():睡眠,是執行緒類的一種方法,一定時間後會自動被喚醒,
會將執行機會讓給其他執行緒。
Wait():等待,是object類的方法,需要notify方法喚醒。
同步關鍵字
一個方法加了同步關鍵字synchronized, 那麼同一時刻只能有一個執行緒進入這個方法的內部 如果一個類中有兩個方法加了同步關鍵字,那麼兩個方法不能同時執行(互斥)。
同步請求和非同步請求
同步:傳送一個請求,等待返回,然後再發送下一個請求 (電話)
非同步:傳送一個請求,不等待返回,隨時可以再發送下一個請求 (廣播)
同步方法和同步塊的區別
同步方法就是在方法前加關鍵字synchronized,然後被同步的方法一次只能有一個
執行緒進入,其他執行緒等待
同步塊會有一個同步的”目標“,使得同步塊更加靈活一些(同步塊可以通過”目標“決
定需要鎖定的物件)
同步塊比同步方法多了兩個指令(monitorenter和monitorexit)。因此同步方法
是比同步塊要快一些
單例設計模式之:懶漢模式和餓漢模式
懶漢(飽漢)模式:初始化不建立,第一次有人使用的時候才建立。執行緒不安全
餓漢模式:初始化建立,第一個使用的人就不需要等待了。