Writer 抽象類, 定義抽象方法write() 每次寫出一個(gè)字符
|-- OutputStreamWriter 也是過(guò)濾器, 將char序列編碼為byte序列
| 底層也是依賴基本的byte輸出流
|-- PrintWriter 是過(guò)濾器, 提供了常用方法println()
| 非常常見的文本處理方法
|-- FileWriter = OutputStreamWriter + FileOutputStream
| 不能指定文本輸出編碼, 不好用!
11 Java 多線程編程
1) 程序: 指令+數(shù)據(jù)的byte序列, 如: qq.exe
2) 進(jìn)程: 正在運(yùn)行的程序, 是程序動(dòng)態(tài)的執(zhí)行過(guò)程(運(yùn)行于主存儲(chǔ)器)
3) 線程: 在進(jìn)程內(nèi)部, 并發(fā)運(yùn)程的過(guò)程(方法)
4) 并發(fā): 進(jìn)程是并發(fā)運(yùn)行的, OS將時(shí)間劃分為很多時(shí)間片段, 盡可能 均勻分配給正在運(yùn)行的程序, 微觀上進(jìn)程走走停停, 宏觀上都在運(yùn)行這種都運(yùn)行的現(xiàn)象叫: 并發(fā), 但是不是絕對(duì)意義上的"同時(shí)"
12 Java 創(chuàng)建一個(gè)線程
1)Thread 類: 線程包含一個(gè)可以運(yùn)行的過(guò)程(方法)Thread 類中包含方法 run
2) 創(chuàng)建一個(gè)具體線程, 需要繼承于Thread類
3) 覆蓋run 方法(就是更新運(yùn)行過(guò)程), 實(shí)現(xiàn)用戶自己的過(guò)程
4) 創(chuàng)建線程實(shí)例(一個(gè)線程)
5) 使用線程實(shí)例的start() 方法啟動(dòng)線程, 啟動(dòng)以后線程會(huì)盡快的去并發(fā)執(zhí)行run()
13 線程的狀態(tài)
1 new 新建
2 Runnable 可以運(yùn)行(就緒)
3 Running 運(yùn)行(正在運(yùn)行)
4 Block 阻塞 掛起
5 Dead 死亡
14 線程狀態(tài)管理:
1)讓出CPU
Thread.yield() 當(dāng)前線程讓出處理器(離開Running), 使當(dāng)前線程進(jìn)入Runnable等待
2)休眠
Thread.sleep(times) 使當(dāng)前線程從 Running 放棄處理器進(jìn)入Block狀態(tài), 休眠times毫秒, 再返回到Runnable如果其他線程打斷當(dāng)前線程的Block(sleep), 就會(huì)發(fā)生InterruptedException.
15 線程的常用屬性
1)線程的優(yōu)先級(jí) (資源緊張時(shí)候, 盡可能優(yōu)先)t3.setPriority(Thread.MAX_PRIORITY); 默認(rèn)有10 優(yōu)先級(jí), 優(yōu)先級(jí)高的線程獲得執(zhí)行的機(jī)會(huì)多. 機(jī)會(huì) 的多少不能通過(guò)代碼干預(yù).默認(rèn)的優(yōu)先級(jí)是 5
2)后臺(tái)線程(守護(hù)線程, 精靈線程)
t1.setDaemon(true); Java進(jìn)程的結(jié)束: 當(dāng)前所有前臺(tái)線程都結(jié)束時(shí), Java進(jìn)程結(jié)束 后臺(tái)線程, 不管是否結(jié)束, 都被停掉! 因?yàn)椴l(fā)的現(xiàn)象, 后臺(tái)線程不會(huì)立即結(jié)束!
3) 線程名字
getName()
4) 當(dāng)前線程
Thread main = Thread.currentThread();
16 兩種方式創(chuàng)建線程
1)繼承Thread類
a 繼承Thread類, 覆蓋run()方法, 提供并發(fā)運(yùn)程的過(guò)程
b 創(chuàng)建這個(gè)類的實(shí)例
c 使用start() 方法啟動(dòng)線程
2)實(shí)現(xiàn)Runnable接口
a 實(shí)現(xiàn)Runnable接口, 實(shí)現(xiàn)run()方法, 提供并發(fā)運(yùn)程的過(guò)程
b 創(chuàng)建這個(gè)類的實(shí)例, 用這個(gè)實(shí)例作為Thread構(gòu)造器參數(shù)
創(chuàng)建Thread類.
c 使用start() 方法啟動(dòng)線程
class Foo implements Runnable{
public void run(){
//....
}
}
Thread t = new Thread(new Foo());
t.start();
3)使用 內(nèi)部類/匿名類 創(chuàng)建線程
17 Sleep 的打斷喚醒
1) Thread.sleep(times) 使當(dāng)前線程從 Running 放棄處理器
進(jìn)入Block狀態(tài), 休眠times毫秒, 再返回到Runnable
2)一個(gè)線程可以提前喚醒另外一個(gè)sleep Block的線程
interrupt() 打斷/中斷
3) 被喚醒線程出現(xiàn) 中斷異常
13) 異步, 同步
1) 異步: 并發(fā), 各干自己的: 如: 一群人上卡車
2) 同步: 步調(diào)一致的處理, 如: 一群人上公交車, "倫敦制"
14) 案例異步寫文件
1) 一個(gè)線程負(fù)責(zé)將控制臺(tái)信息讀取到內(nèi)存緩沖區(qū)(集合)如果控制臺(tái)輸入quit 將結(jié)束輸入. 中斷寫出線程
2) 一個(gè)線程負(fù)責(zé)將緩沖區(qū)中的信息寫到硬盤文件
每次檢查緩沖區(qū)是否有數(shù)據(jù), 如果有就寫出, 直到空為止如果沒有數(shù)據(jù)就休眠5秒
寫出線程是后臺(tái)線程, 可以自動(dòng)結(jié)束
3) 緩沖區(qū)采用隊(duì)列(FIFO)的工作方式
1 兩種方式創(chuàng)建線程
1)繼承Thread類
a 繼承Thread類, 覆蓋run()方法, 提供并發(fā)運(yùn)程的過(guò)程
b 創(chuàng)建這個(gè)類的實(shí)例
全國(guó)職稱計(jì)算機(jī)考試速成過(guò)關(guān)系列套裝:W .. 定價(jià):¥133 優(yōu)惠價(jià):¥133.0 更多書籍 | |
全國(guó)職稱計(jì)算機(jī)考試速成過(guò)關(guān)系列套裝:W .. 定價(jià):¥124 優(yōu)惠價(jià):¥124.0 更多書籍 |