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

教材学习内容总结

第十章 输入/输出

一、InputStream与OutputStream

(一)串流设计的概念

  1. 输入串流代表对象:java.io.InputStream

  2. 输出串流代表对象:java.io.OutputStream

    范例IO

  3. 将某个文档读入并另存为另一个文档:

    范例Copy

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

    范例Download

(二)串流继承结构

  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

二、字符处理类

(一)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

一、线程

(一)线程简介

  • [范例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

二、并行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

参考资料

20145105 《Java程序设计》第6周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. 【紫书】Rails UVA - 514 栈

    题意:判断出栈顺序是否合法 题解:两个指针,A指向入栈序列,B指向出栈. 的分三种情况:if     1.A==B :直接入栈加出栈即可A++,B++ else 2.和栈顶相同,直接出栈A==stac ...

  2. CodeForces - 847B Preparing for Merge Sort 二分

    http://codeforces.com/problemset/problem/847/B 题意:给你n个数(n<2e5)把它们分成若干组升序的子序列,一行输出一组.分的方法相当于不断找最长递 ...

  3. MySQL在windows下的图形安装

    1.mysql官网下载mysql-5.5.53-winx64.msi文件并保存到磁盘相应目录. 2.图形化安装mysql数据库: 1)双击mysql-5.5.53-winx64.msi,出现欢迎界面, ...

  4. python面向对象高级:@property

    @property 把方法『变成』了属性,广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性. 最大的作用就是既能检查参数,又可以用类 ...

  5. 查找算法:二分法查找及其python实现案例

    承接上一篇:查找:顺序查找与二分法查找,将二分法更多详细的python实现解题写下笔记. 简单方法 ''' 二分法查找在列表中的用户输入值,返回index 三种情况跳出循环体: LR相邻 LR位置重合 ...

  6. What is Gensim?

    Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达.它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法, ...

  7. android adt自带eclipse无法设置ndk路径

    android sdk官网下载r23版本的adt时自带的eclipse没有设置ndk路径的地方,通过Install New Software 发现无法更新,那么如何解决这个问题呢?     软件百度云 ...

  8. 得到scp命令的完整路径

    奇怪的crontab 遇上shell scp不执行了-CSDN论坛 https://bbs.csdn.net/topics/390593780

  9. 动画-缩放,旋转 CGAffineTransform

    CGAffineTransform transform; // = CGAffineTransformScale(flyImoji.transform, 8, 8);    transform = C ...

  10. 为帝国cms模板添加站内搜索小教程

    由于客户的需要,最近都在整帝国cms,很多东西还是不熟悉,特别是帝国cms模板,以前用的那些网站模板一般是保存在ftp文件中,而帝国cms模板是直接保存在数据库中,修改是在网站后台的模板管理,得慢慢适 ...