学号20155311 2016-2017-2 《Java程序设计》第6周学习总结
教材学习内容总结
第十章 输入/输出
InputStream类html
InputStream包含三个read()方法用于从流中读取数据:
public abstract int read();
抽象方法,以int类型返回流中可用的下一个字节。读取到末尾,返回-1。java
- public int read(byte[]array); 该方法从流中读取字节填充到数组array的连续元素中,最大读取长度为array.length个字节。读取到末尾,返回-1。
- public int read(byte[] array, int offset, int length); 该方法从流中读取length长度的字节填充到数组array中,将array[offset]做为存放起始位置。读取到末尾,返回-1。
- public int available(); 返回输入流中能够读取的字节数。注意:若输入阻塞,当前线程将被挂起,若是InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用。
public long skip(long n); 忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节再读取。
若是发生I/O类型错误,会抛出IOException类型的异常。
OutputStream类
OutputStream提供了3个write()方法来输出数据,和InputStream相对应:
public abstract void write(int b); 先将int转换成byte类型,把低字节写入到输出流中。
public void write(byte[] array); 将数组array中的字节写到输出流。
public void write(byte[] array, int offset, int length); 将数组array中从array[offset]开始的length个字节写到输出流。
public void flush(); 将数据缓冲区中数据所有输出,并清空缓冲区。
若是发生I/O类型错误,会抛出IOException类型的异常。
git
10.2 字符处理类
- 包java.io中的两个类Reader和Writer,他们是能将字节流以字符流方式进行读写的对象,所以字符流在本质上是以Reader和Writer封装的字节流。Reader和Writer都是抽象类,这两个类都实现了声明close()方法的AutoCloseable接口。
- Reader和Writer类以及他们的子类自己都不是流,可是他们提供了一些方法,可用于将底层的流做为字符流读写。所以,一般使用底层的InputStream和OutputStream对象来建立Reader和Writer对象。
第十一章部分 - 线程与并行API
11.1 线程
- 线程 能够拥有多个流程,也就是多线程程序若是想在main()之外独立创建流程,能够撰写类操做java.lang.Runnable接口,流程的进入点是操做在run()方法中;从main()开始的流程会由主线程执行,建立Thread实例来执行runnable实例定义的run()方法;要启动线程执行指定流程,必需要调用Thread实例的start()。 Thread与Runnable 将流程定义在 Runnable 的 run()方法中;继承 Thread 类,从新定义 run()方法。
- 线程生命周期 一个 Thread被标示为 Daemon线程,在全部非Daemon线程都结束时,JVM自动终止;使用 setDaemon()方法来设定一个线程是否为 Deamon线程,使用 isDaemon()方法判断线程是否为 Deamon线程默认全部从 Deamon线程产生的线程也是 Deamon线程;
- 使用 Thread的 setpriority()方法设定优先权,1-10,默认值是5让线程进入 Blocked状态,调用 Thread.sleep()等方法,等待输入/输出线程因输入/输出进入 Blocked状态,在完成输入/输出后,会回到 runnable状态;join()将线程加入另外一线程的流程中;线程完成run()方法后,会进入Dead,进入Dead的线程不能够再次调用start()方法。
- ThreadGroup 线程一旦纳入某个群组,就没法更换;java.lang.ThreadGroup能够管理群组中的线程; interrupt()方法能够中断群组中的全部线程;
- setMaxpriority()方法能够设定群组中全部线程最大优先权; enumerate()方法能够一次取得群组中全部线程; activeCount()方法取得群组的线程数量; uncaughtException()方法处理某个线程未被捕捉的异常。 synchronized与volatile 被标示为 synchronized的区块将会被监控,任何线程要执行该区块必须先取得指定的对象锁定;线程尝试执行synchronized区块而进入 Blocked,在取得锁定以后,会先回到Runnable状态,等待排入 Runnning状态; synchronized要求达到的所标示区块的互斥性,与可见性;在变量上声明 volatile,表示变量是不稳定、易变的,可能在多线程下存取,保证变量的可见性。
- 在java中,若是想在main()之外独立设计流程,能够撰写类操做java.lang.Runnable接口,流程的进入点是操做在run()方法中。若是想要为JVM加装CPU,就是建立Thread实例,要启动额外CPU就是调用Thread实例的start()方法,额外CPU执行流程的进入点,能够定义在Runnale接口的run()方法中。
- 操做Runnable接口的好处就是较有弹性,你的类还有机会继承其余类。若继承了Thread,那该类就是一种Thread,一般是为了直接利用Thread中定义的一些方法,才会继承Thread来操做。
11.2 并行API
- Lock:相对与Thread模型的隐式的锁对象,Lock提供了显式的锁操做从而简化应用程序。Executors:提供了一组HighLevelAPI用来执行和管理并行任务。
- ConcurrentCollections:包含了一组支持并行处理的数据结构,大大简化了并行编程难度。AtomicVariables:减小了同步操做而且避免数据不一致。Fork/Join框架:提供了进程操做的支持。
- ReadWriteLock接口定义了读取锁定与写入锁定行为,可使用readLock()、writeLock()方法返回Lock操做对象。ReentrantReadWriteLock是ReadWriteLock接口的主要操做类,readLock()方法会返回ReentrantReadWriteLock.ReadLock实例,writeLock()犯法会返回ReentrantReadWriteLock.WriteLock实例。
- Condition接口用来搭配Lock,最基本用法就是达到Object的wait()、notify()、notifyAll()方法的做用。Condition的await()、signal()、signalAll()方法,可视为Object的wait()、notify()、notifyAll()方法的对应。
教材学习中的问题和解决过程
第十章第十一章感受还好,第四五六七章的内容才是java核心内容,比较抽象。以后的内容都是介绍各类API的应用,都是活生生的例子,比较具体,若是以为难那是由于对这部分知识感到陌生,不熟悉编程
代码调试中的问题和解决过程
P334的代码为何要用threadB?api
程序启动后主线程就开始,在主线程中新建threadB,并在启动threadB后 ,将之加入主线程流程,因此threadB会先执行完毕,而后主线程才会继续本来的流程。数组
git log运行截图
数据结构
上周考试错题总结
基于评分标准,我给本博客打分:10。得分状况以下:
1.正确使用Markdown语法(加1分)
2.错题学习深刻的(加1分)
3.教材学习中的问题和解决过程(加3分)
4.进度条中记录学习时间与改进状况(加1分)
5.本周有效代码超过400行(加2分)
6.模板中的要素齐全(加1分)
7.代码调试中的问题和解决过程(加1分)多线程
评分标准
- 正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(连接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
- 模板中的要素齐全(加1分)
- 缺乏“教材学习中的问题和解决过程”的不加分
- 缺乏“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺乏“结对及互评”的不能打开的不加分
- 缺乏“上周考试错题总结”的不能加分
- 缺乏“进度条”的不能加分
- 缺乏“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分框架
代码调试中的问题和解决过程, 一个问题加1分学习
- 本周有效代码超过300分行的(加2分)
- 其余加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进状况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深刻的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习状况真实可信的加1分
- 扣分:
- 有抄袭的扣至0分
- 代码做弊的扣至0分
- 迟交做业的扣至0分
点评模板:
点评过的同窗博客和代码
基于评分标准,我给本博客打分: 9分。得分状况以下:
- 正确使用Markdown语法:加1分
- 教材学习中的问题和解决过程,:加1分
- 代码调试中的问题和解决过程,:加2分
- 本周有效代码超过300分行:加2分
- 排版精美的加1分
- 进度条中记录学习时间与改进状况的加1分
- 有动手写新代码的加1分
- 正确使用Markdown语法(加1分)
- 错题学习深刻的(加1分)
- 教材学习中的问题和解决过程(加2分)
- 进度条中记录学习时间与改进状况(加1分)
- 本周有效代码超过400行(加2分)
- 版式精美(加1分)
- 正确使用Markdown语法(加1分)
- 错题学习深刻的(加1分)
- 教材学习中的问题和解决过程(加2分)
- 进度条中记录学习时间与改进状况(加1分)
- 本周有效代码超过400行(加2分)
- 模板中的要素齐全(加1分)
- 代码调试中的问题和解决过程(加1分)
- 版式精美(加1分)
基于评分标准,我给本博客打分:10。得分状况以下:
- 正确使用Markdown语法(加1分)
- 错题学习深刻的(加1分)
- 教材学习中的问题和解决过程(加2分)
- 进度条中记录学习时间与改进状况(加1分)
- 本周有效代码超过400行(加2分)
- 模板中的要素齐全(加1分)
- 代码调试中的问题和解决过程(加1分)
- 版式精美(加1分)
其余(感悟、思考等,可选)
虽然说这周又是自学两章,知识点比较多,没什么难点,java的核心知识与难点以前都已经学完了,后面的章节全都是介绍一些类的应用。看第一遍教材的时候确定以为陌生,难以接受。这是个过程,很正常。在不断的学习中,我也在不断的寻找适合本身的好的学习方法。重要的不是要你学多少java知识,而是经过不断的学习过程,来总结出一套适合本身的良好的学习方法,这将受用一辈子。固然不一样的人确定状况不同,适合本身的才是最好的。时间用得多,不必定就学得好。找到属于本身的学习方法,提升效率!这比一切都重要!
学习进度条
目标 |
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 |
|
第五周 |
280/1260 |
1/5 |
14/70 |
|
|
第六周 |
478/1738 |
2/7 |
16/86 |