教材学习内容总结
十章
串流设计的概念 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象。数据就好比水,串流就像水管,通过水管的衔接,水由一端流向另一端。从应用程序角度来看,若要将数据从来源取出,可以使用输入串流,要将数据写入目的地,可以使用输出串流。在Java中,输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutputStream实例。无论数据源和目的为何,只要取的InputStream或者OutputStream的实例,操作输入输出的方法是一致的。
十一章
之前学习的各种实例都是单线程的,即程序从main()进入后只有一个流程,但是在设计时候可以根据需要拥有多个流程,就是多线程(Multi-thread)程序
- Thread和Runable:
JVM即一台虚拟机,只有主线程的CPU,如果想增加CPU就得创建thread实例,CPU执行的进入点,定义在Runnable的run()方法中
撰写多线程程序可以操作Runnable接口,也可以继承Thread类,重新定义run()方法,但操作Runnable接口会使得程序更富弹性
2. 线程生命周期
Daemon线程:在所有的非Daemon线程结束时,JVM就会自动终止
基本状态图:start—>runnable—>(blocked)—>running—>dead , Thread.sleep()、wait()阻断、输入输出完成等都会让线程进入blocked状态,当某线程进入Blocked,最好让另一线程进入running状态,避免cpu空闲下来,是改进效能的方式之一。
join():安插线程,在A执行的时候插入B,等B完成后在进行A(可以指join()的时间,如join(1000)即为加入线程最多执行1000毫秒)
3. 等待和通知
wait():指定等待排班时间
notify():通知加入排班
notifyall():锁定竞争,通知所有等待中的线程参与排班
4. 并行API
Lock、ReadWriteLock和Condition:提供类似synchronized、wait()、notify()、notifyall()的作用以及更多高级功能
Executor :Executor接口可以将Runnable的指定与实际如何执行分离
Future与Callable搭配使用
代码调试中的问题和解决过程
敲书上327页的代码的时候,出现了和书上不一样的结果,询问同学也知道了是某两行代码出现了问题。然后及时的修改了。
学习进度条
代码行数 | 博客数量 | 学习时间 | 学习心得 | |
目标 | 4000 | 30 | 300 | |
第五周 | 1470 | 6 | 68 | |
第六周 | 700/2170 | 2/8 | 15/83 |