20145203盖泽双 《Java程序设计》第6周学习总结
教材学习内容总结
1、如果要将数据从来源中取出,可以使用输入串流,若将数据写入目地,
可以使用输出串流。在java中,输入串流代表对象为 java.in.InputStream实例,输出串流代表对象为 java.io.Outputstream实例2、在来源与目的地都不知道的情况下可以设计一个通用的dump()方法,该方法接受InputStream与OutputStream实例,分别代表读取数据的来源,以及输出的目的地
3、每次从Inputstream读入的数据,都会先置入byte数据,她的read()方法会尝试读入btye的数据,并返回读入的字节。
4、可以使用System的setIn()方法指定InputStream实例,重新指定标准输入来源
①FileInputStream是InputStream的子类,主要操作InputStream的read()抽象方法;FIleOutputStream是OutputStream的子类,主要操作其write()的操作方法
②ByteArrayInputStream是InputStream的子类,可以指定byte数据创建实例,主要操作其read()抽象方法;ByteArrayOutputStream是OutputStream的子类,主要操作其write() 的操作方法
5、串流装饰器本身并没有改变InputStream和OutputStream的行为,只是在得到数据之后,再做一些加工处理。
6、DataInputStream与DataOutputStream主要提供读取、写入java基本数据类型的方法,会自动在指定的类型与字节之间转换。实例代码见git开源中国。
7、Reader、Writer也有一些装饰器类可供使用,如果串流处理的字节数据,实际上代表某些字符的编码数据,而你想要将这些字节数据转换为对应的编码字符,可以使用InputStreamReader和OutputStreamWriter。若要读入文档、转为字符串并显示在文本模式中,可以使用CharUtil.dump()。
8、如果处理串流字节数据,将这些字节数据转换为对应的编码制度,可以使用 InputStringReader、InputStringWriter打包。
9、单线程程序:启动的程序从main()程序进入点开始至结束只有一个流程。
10、多线程程序:一个程序拥有多个流程。示范代码如下:
11、撰写多线程程序的方式:操作Runnable接口,在run()中定义额外流程;继承Thread类,在run()中定义额外流程,两者之间的差别是:操作Runnable接口的好处就是较有弹性,类还有机会继承其他类;若继承了Thread类,那该类就是一种Thread,通常是为了直接利用Thread中定义的一些方法,才会继承Thread来操作。
12、在调用Thread实例start()方法后,基本状态为可执行(Runnable)、被阻断(Blocked)、执行中(Running)。
13、每个线程产生时,都会归入某个线程群组,这视线程是在哪个群组中产生,如在main()主流程中产生一个线程,该线程会属于main线程群组。如果没有指定,则归入产生该子线程的线程群组,也可以自行指定线程群组,线程一旦归入某个群组,就无法更换群组。
14、如果在方法上标示synchronized,则执行方法必须取得该实例的锁定。synchronized不只可声明在方法上,也可以描述句方式使用。不正确的使用可能会造成死结。
15、执行synchronized范围的程序代码期间,若调用锁定对象的wait()方法,线程会释放对象锁定,并进入对象等待集合而处于阻断状态,其他线程可以竞争对象锁定,取得锁定的线程可以执行synchronized范围的程序代码。
16、放在等待集合的线程不会参与CPU排班,wait()可以指定等待时间,时间到之后线程会再次加入排班,如果指定时间0或不指定,则线程会持续等待,直到被中断(调用interrupt()或是告知notify())可以参与排班。
17、被竞争锁定的对象调用notify()时,会从对象等待集合中随机通知一个线程加入排班,再次执行synchronized前,被通知的线程会与其他线程共同竞争对象锁定;如果调用notifyAll(),所有等候集合中的线程都会被通知参与排班,这些线程会与其他线程共同竞争对象锁定。
18、在使用高级并行API时,Lock接口的操作对象可实现synchronized的功能。
19、在使用高级并行API时,Condition接口的操作对象可实现Object的wait()、notify()、notifyAll()功能。Future接口的操作对象可以让你在未来取得执行结果。
教材学习中的问题和解决过程
1、不太理解撰写单线程序、多线程程序的方式差别。
解决方法:操作Runnable接口的好处就是较有弹性,类还有机会继承其他类;若继承了Thread类,那该类就是一种Thread,通常是为了直接利用Thread中定义的一些方法,才会继承Thread来操作。
其他
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 | |
第六周 | 500/1400 | 1/9 | 20/130 |
参考资料
- ...