案例一:ObjectIODemo(理解 對(duì)象序列化概念,重復(fù)講下深層、淺層復(fù)制)
1、對(duì)象的序列化: 將Object轉(zhuǎn)換為byte序列,就是序列化,反之叫反序列化
2、為什么要序列化: 為了在byte流中存儲(chǔ)對(duì)象
3、如何序列化: 使用writeObject(Object)/readObject()
1) 序列化流, 是過濾流
ObjectOutputStream writeObject(Object) 序列化對(duì)象
ObjectInputStream readObject() 對(duì)象的反序列化
2) 序列化接口(必須實(shí)現(xiàn)Serializable接口): 對(duì)象必須實(shí)現(xiàn)"序列化接口"才能進(jìn)行 "序列化"
否則出現(xiàn)不能序列化的異常!
ObjectOutputStream out = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(file)));
往文件里寫入一個(gè)對(duì)象,從文件里讀一個(gè)對(duì)象, 深層復(fù)制,淺層復(fù)制
List
List
案例二:ByteArrayStreamDemo(了解是字節(jié)流,在內(nèi)存中存取速度很快,內(nèi)存的io不用加緩存流)
byte[] buf = {5,(byte)0xff,-1};//{05,ff,ff}
//將byte數(shù)組作為流進(jìn)行讀取處理, 流不僅僅是出來文件的!
ByteArrayInputStream in =
new ByteArrayInputStream(buf);
ByteArrayOutputStream out =
//BAOS 中包含一個(gè)變長Byte數(shù)組
//將內(nèi)存中的變長byte[] 數(shù)組作為輸出流
new ByteArrayOutputStream();
out.write(5);
案例三: ByteArrayIODemo(沒有新的內(nèi)容,只是底層的字節(jié)流換了,過濾流(功能加強(qiáng)流)還是一樣的)
案例四:CopyDemo: IOUtils public static Object deepCopy(Object obj){
Java 多線程編程(多線程程序的意義:支持代碼并行)
重點(diǎn):java創(chuàng)建線程的兩種方式 線程圖
一、概念
1) 程序: 指令+數(shù)據(jù)的byte序列, 如: qq.exe
2) 進(jìn)程: 正在運(yùn)行的程序, 是程序動(dòng)態(tài)的執(zhí)行過程(運(yùn)行于主存儲(chǔ)器)
3) 線程: 在進(jìn)程內(nèi)部, 并發(fā)運(yùn)程的過程(方法)
4) 并發(fā): 進(jìn)程是并發(fā)運(yùn)行的, OS將時(shí)間劃分為很多時(shí)間片段, 盡可能
均勻分配給正在運(yùn)行的程序, 微觀上進(jìn)程走走停停, 宏觀上都在運(yùn)行
這種都運(yùn)行的現(xiàn)象叫: 并發(fā), 但是不是絕對(duì)意義上的"同時(shí)"
二、java創(chuàng)建一個(gè)線程的方法 對(duì)照案例一: 對(duì)照代碼畫一下執(zhí)行線程圖,重點(diǎn)表達(dá)與main()的關(guān)系,啟動(dòng)線程后,與main就沒關(guān)系了)
在java中,所有線程都直接間接由主線程啟動(dòng),但啟動(dòng)后獨(dú)立于主線程
1、 繼承Thread類, 覆蓋run()方法, 提供并發(fā)運(yùn)程的過程
2、創(chuàng)建這個(gè)類的實(shí)例
3、使用start() 方法啟動(dòng)線程 // 重點(diǎn):調(diào)用重寫后的run方法
案例三:
2)實(shí)現(xiàn)Runnable接口
a 實(shí)現(xiàn)Runnable接口, 實(shí)現(xiàn)run()方法, 提供并發(fā)運(yùn)程的過程
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();
案例二:CurrentThreadDemo
//main方法被主線程調(diào)用,主線程是Thread實(shí)例
//可以使用Thread.currentThread()獲得正在調(diào)用當(dāng)前方法的線程
重點(diǎn)理解:方法是被線程調(diào)用的,具體是哪個(gè)線程,運(yùn)行期決定
兩種工作中用得比較多的寫法:
new Thread(){
public void run(){.....}
}.start();
new Thread(new Runnable(){
public void run(){......}
}).start();
全國職稱計(jì)算機(jī)考試速成過關(guān)系列套裝:W .. 定價(jià):¥133 優(yōu)惠價(jià):¥133.0 更多書籍 | |
全國職稱計(jì)算機(jī)考試速成過關(guān)系列套裝:W .. 定價(jià):¥124 優(yōu)惠價(jià):¥124.0 更多書籍 |