案例一:ObjectIODemo(理解 对象序列化概念,重复讲下深层、浅层复制)
1、对象的序列化: 将Object转换为byte序列,就是序列化,反之叫反序列化
2、为什么要序列化: 为了在byte流中存储对象
3、如何序列化: 使用writeObject(Object)/readObject()
1) 序列化流, 是过滤流
ObjectOutputStream writeObject(Object) 序列化对象
ObjectInputStream readObject() 对象的反序列化
2) 序列化接口(必须实现Serializable接口): 对象必须实现"序列化接口"才能进行 "序列化"
否则出现不能序列化的异常!
ObjectOutputStream out = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(file)));
往文件里写入一个对象,从文件里读一个对象, 深层复制,浅层复制
List
List
案例二:ByteArrayStreamDemo(了解是字节流,在内存中存取速度很快,内存的io不用加缓存流)
byte[] buf = {5,(byte)0xff,-1};//{05,ff,ff}
//将byte数组作为流进行读取处理, 流不仅仅是出来文件的!
ByteArrayInputStream in =
new ByteArrayInputStream(buf);
ByteArrayOutputStream out =
//BAOS 中包含一个变长Byte数组
//将内存中的变长byte[] 数组作为输出流
new ByteArrayOutputStream();
out.write(5);
案例三: ByteArrayIODemo(没有新的内容,只是底层的字节流换了,过滤流(功能加强流)还是一样的)
案例四:CopyDemo: IOUtils public static Object deepCopy(Object obj){
Java 多线程编程(多线程程序的意义:支持代码并行)
重点:java创建线程的两种方式 线程图
一、概念
1) 程序: 指令+数据的byte序列, 如: qq.exe
2) 进程: 正在运行的程序, 是程序动态的执行过程(运行于主存储器)
3) 线程: 在进程内部, 并发运程的过程(方法)
4) 并发: 进程是并发运行的, OS将时间划分为很多时间片段, 尽可能
均匀分配给正在运行的程序, 微观上进程走走停停, 宏观上都在运行
这种都运行的现象叫: 并发, 但是不是绝对意义上的"同时"
二、java创建一个线程的方法 对照案例一: 对照代码画一下执行线程图,重点表达与main()的关系,启动线程后,与main就没关系了)
在java中,所有线程都直接间接由主线程启动,但启动后独立于主线程
1、 继承Thread类, 覆盖run()方法, 提供并发运程的过程
2、创建这个类的实例
3、使用start() 方法启动线程 // 重点:调用重写后的run方法
案例三:
2)实现Runnable接口
a 实现Runnable接口, 实现run()方法, 提供并发运程的过程
b 创建这个类的实例, 用这个实例作为Thread构造器参数
创建Thread类.
c 使用start() 方法启动线程
class Foo implements Runnable{
public void run(){
//....
}
}
Thread t = new Thread(new Foo());
t.start();
案例二:CurrentThreadDemo
//main方法被主线程调用,主线程是Thread实例
//可以使用Thread.currentThread()获得正在调用当前方法的线程
重点理解:方法是被线程调用的,具体是哪个线程,运行期决定
两种工作中用得比较多的写法:
new Thread(){
public void run(){.....}
}.start();
new Thread(new Runnable(){
public void run(){......}
}).start();
全国职称计算机考试速成过关系列套装:W .. 定价:¥133 优惠价:¥133.0 更多书籍 | |
全国职称计算机考试速成过关系列套装:W .. 定价:¥124 优惠价:¥124.0 更多书籍 |