20145105 《Java程序设计》第6周学习总结

20145105 《Java程序设计》第6周学习总结

教材学习内容总结

第十章 输入/输出

1、InputStream与OutputStreamhtml

(一)串流设计的概念java

  1. 输入串流表明对象:java.io.InputStream
  2. 输出串流表明对象:java.io.OutputStreamgit

    范例IOapi

  3. 将某个文档读入并另存为另外一个文档:服务器

    范例Copy架构

  4. 从HTTP服务器读取某个网页,并另存为文档学习

    范例Download.net

(二)串流继承结构线程

  1. 标准输入/输出:设计

    • 使用System的setIn(),从新指定标准输入来源。

    范例StandardIn

    • 使用System的setOut(),将结果输出至指定目的地。

    范例StandardOut

(三)串流处理装饰器

  1. BufferedInputStream与BufferedOutputStream

    • 提供内部缓冲区功能

    范例BufferedIO

  2. DataInputStream与DataOutputStream

    • 用来装饰InputStream等提供读取、写入Java基本数据类型的方法

    范例Member

    范例MemberDemo

  3. ObjectInputStream与ObjectOutputStream

    • 提供readObject()将数据读入为对象,writeObject()将对象写至目的地

    范例Member2

    范例Member2Demo

2、字符处理类

(一)Reader与Writer继承架构

  1. 针对字符读取:java.io.Reader类
  2. 针对字符写入:java.io.Writer类

    范例CharUtil

    范例CharUtilDemo

(二)字符处理装饰器

  1. InputStreamReader与OutputStreamWriter

    • 对串流数据打包

    范例CharUtil2

  2. BufferedReader与BufferedWriter

    • 对Reader、Writer提供缓冲区
  3. PrintWriter

    • 对Writer进行打包

第十一章 线程与并行API

1、线程

(一)线程简介

  • [范例TortoiseHareRace](http://git.oschina.net/schwarizard/Chapter-11/blob/master/TortoiseHareRace?dir=0&filepath=TortoiseHareRace&oid=dc06bda11591ac12e1cee75c409aea268c8c4c1f&sha=db18b24bfd822ddb2170d450abd0d47f80fe2c1e)
  1. Java中,能够经过撰写类操做java.lang.Runnable接口,流程进入点操做在run()方法中,建立Thread实例来执行run()方法。

    范例Tortoise

    范例Hare

    范例TortoiseHareRace2

(二)Thread与Runnable

  1. 操做Runnable接口较有弹性,还有机会继承其余类。
  2. 继承Thread一般是为了直接利用Thread中定义的一些方法。

(三)线程生命周期

  1. Daemon线程

    • 全部非Daemon线程都结束时,JVM自动终止。

    范例DaemonDemo

  2. Thread基本状态图

    • Runnable:可执行
    • Blocked:被阻断
    • Running:执行中

    范例Download

    范例Download2

    范例InterruptedDemo

  3. 安插线程

    • 使用join()能够将线程加入成为另外一线程的流程中。

    范例JoinDemo

  4. 中止线程

    • 使用stop()会直接释放全部已锁定对象,可能使对象陷入没法预期状态。

(四)关于ThreadGroup

(五)synchronized与volatile

  1. 使用synchronized

    • 执行方法必须取得该实例的锁定
    • 不正确使用synchornized可能形成效能低落或死结

    范例DeadLockDemo

  2. 使用volatile

    • 能够达到变量范围

    范例Variable1Test

    范例Variable2Test

    • 能够在变量上声明volatle,表示变量是不稳定、易变的。

    范例Variable3Test

(六)等待与通知

  1. 调用锁定对象的wait方法,线程会释放对象锁定,并进入对象等待集合(阻断状态)
  2. 放在等待集合的线程不会参与CPU排班,wait()能够指定等待时间。
  3. 线程被notify()或时间到时,再开始执行。

    范例Producer

    范例Consumer

    范例Clerk

    范例ProducerConsumerDemo

2、并行API

(一)Lock、ReadWriteLock与Condition

  1. 使用Lock

    • Lock接口主要操做类之一是ReentrantLock,能够达到syncharonized的做用。

    范例ArrayList

    • Lock还定义tryLock()方法。

    范例NoDeadLockDemo

  2. 使用ReadWriteLock

    • ReadWriteLock接口定义了读取锁定与写入锁定行为

    范例ArrayList2

  3. 使用StampedLock

    • StampedLock类可支持乐观读取

    范例ArrayList3

  4. 使用Condition

    • Condition接口用来搭配Lock

    范例Clerk1

    范例Clerk2

(二)使用Executor

  1. 使用ThreadPoolExeecutor

  2. 使用ScheduledThreadPoolExecutor

  3. 使用ForkJoinPool

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

  1. 不少代码运行时都会出现以下状况,还没有解决

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

由于上传博客时死机了(多是同时开启的程序太多),强制关机后不少东西都不见了,还要从新再写一遍,知识点还好,代码打的简直心累,但愿下周不要再发生这种事了

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3000行 15篇 300小时
第一周 70/70 2/2 14/14
第二周 150/220 1/3 18/32
第三周 400/620 1/4 35/67
第四周 850/1470 1/5 30/97
第五周 560/2030 1/6 34/131
第六周 970/3000 2/8 46/177

参考资料

相关文章
相关标签/搜索