20155210潘滢昊 2016-2017-2 《Java程序设计》第6周学习总结

20155210 2016-2017-2 《Java程序设计》第6周学习总结

教材学习内容总结

20155210潘滢昊 2016-2017-2 《Java程序设计》第6周学习总结

  • 流(Stream)是对「输入输出」的抽象,注意「输入输出」是相对程序而言的

  • InputStream与OutputStream

read

write

二进制文件

  • 标准输入输出

System.in: 标准输入,默认关联到键盘(终端输入)

System.out: 标准输出,默认关联到显示器(终端输出)

System.err: 标准错误,默认关联到显示器(终端输出)

  • 输入输出重定向:setIn,setOut,setErr

  • FileInputStream与FileOutPutStream

    文件读写

  • 装饰器类:

  • Decorator模式

  • BufferedInputStream与BufferedOutputStre- am: 内部提供缓冲,提高效率

  • DataInputStream与DataOutputStream:基本数据类型与字节的转换,API好好研究一下

  • ObjectInputStream与ObjectOutputStream

    java.io.Serializable接口

  • 线程生命周期

20155210潘滢昊 2016-2017-2 《Java程序设计》第6周学习总结

1.Daemon线程:主线程会从main()方法开始执行,直到main()方法结束后停止JVM。如果主线程中启动了额外线程,默认会等待被启动的所有线程都执行完run()方法才中止JVM。 如果一个Thread被标示为Daemon线程,在所有的非Daemon线程都结束时,JVM自动就会终止。

2.Thread基本状态图:用Thread实例start()方法后,基本状态为可执行(Runnable)、被阻断(Blocked)、执行中(Running)。

3.安插线程:join()表示将线程加入称为另一个线程的流程中,线程使用join()加入至另一个线程时,另一个线程会等待被加入的线程工作完毕,然后在继续它的动作。

4.停止线程:线程完成run()方法后,就会进入Dead,进入Dead的线程不可以再次调用start()方法,否则会抛出IllegalThreadStateException异常。

教材学习中的问题和解决过程

  • 问题1:在第十章开始时,对书上的输入和输出流的划分不太理解
  • 问题1解决方案:蓝墨云班课的教学视频《Java当中的IO(一)》
  • 问题2:可通过wait()、notify()与notifyAll()三个方法来控制线程释放对象的锁定或通知线程参与锁定竞争,那么三个方法有什么区别?
  • 问题2解决方案:

wait

Object的wait方法有三个重载方法,其中一个方法wait() 是无限期(一直)等待,直到其它线程调用notify或notifyAll方法唤醒当前的线程;另外两个方法wait(long timeout) 和wait(long timeout, int nanos)允许传入 当前线程在被唤醒之前需要等待的时间,timeout为毫秒数,nanos为纳秒数。

notify

notify方法只唤醒一个等待(对象的)线程并使该线程开始执行。所以如果有多个线程等待一个对象,这个方法只会唤醒其中一个线程,选择哪个线程取决于操作系统对多线程管理的实现。

notifyAll

notifyAll 会唤醒所有等待(对象的)线程,尽管哪一个线程将会第一个处理取决于操作系统的实现。

这些方法可以使用于“生产者-消费者”问题,消费者是在队列中等待对象的线程,生产者是在队列中释放对象并通知其他线程的线程。

让我们来看一个多线程作用于同一个对象的例子,我们使用wait, notify and notifyAll方法。

代码调试中的问题和解决过程

  • 问题1:在学习死结部分时,编译运行P343 DeadLockDemo.java代码,有时发生死结,有时不发生
  • 问题1解决方案:书上的解释是这样:发生死结的原因在于,thread1在调用resource1.corportate(resource2)时,会取得r1的锁定,若此时thread2也正好调用resource2.corportate(resource1),取得r2的锁定,凑巧thread1现在打算运用传入的r2调用doSome(),理应取得r2的锁定,但锁定现在被t2拿走了,于是t1进入阻断,而t2也打算运用传入的r1调用doSome(),理应取得r1的锁定,但锁定现在是t1取走,于是t2进入等待。

代码托管

20155210潘滢昊 2016-2017-2 《Java程序设计》第6周学习总结

上周考试错题总结

  • 下列属于非受检异常的是哪项?

    :

A.SQLException

B.IOException

C.NullPointerException

D.OutOfMemoryError

答案:D

异常分为受检异常与非受检异常,OutOfMemoryError属于Error为非受检异常

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

20155210潘滢昊 2016-2017-2 《Java程序设计》第6周学习总结

- 结对学习内容
- 上周错题
- 线程与并行API

其他(感悟、思考等,可选)

有了教学视频后,好多问题都可以得到解答,教学视频这个东西很好

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第六周 407/2023 1/9 24/163

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:25小时

  • 实际学习时间:24小时

  • 改进情况:每天都能打代码,并上传,但是现在大多代码还是知其然而不知其所以然。

(有空多看看现代软件工程 课件

软件工程师能力自我评价表
)

参考资料

上一篇:[转]一图读懂JVM架构解析


下一篇:New Arrival MB SD Connect Compact 5 (MB SD C4) Star Diagnosis