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

教材学习内容总结

第十章

  • Java中,输入串流代表对象为java.io.InputStream,输出串流代表对象为java.io.OutputStream
  • InputStream的read()方法每次尝试读入byte数组长度的数据,并返回实际读入的字节;OutputStream的write()方法,指定要写出的byte数组、初索引与数据长度。
  • System的setIn()方法指定InputStream,重新制定标准输入来源;setOut()方法指定PrintStream,将结果输出至制定的目的地。
  • InputStream、OutStream提供串流基本操作,如果想要为输入/输出的数据做加工处理,则可以使用打包器类。常用的打包器具备缓冲区作用的BufferedOutputStream、BufferedInputStream,具备数据转换处理的DataInputStream、DataOutputStream,具备对象串行化能力的ObjectInputStream、ObjectOutputStream等

第十一章

  • 在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run()方法中。
  • 在java中,从main()开始的流程会由主线程执行,可以创建Thread实例来执行Runnable实例定义的run()方法。
  • 使用Lock

    lock接口主要操作类之一为ReentrantLock,可以达到synchronized的作用。

为了避免调用Lock()后,在后续执行流程中抛出异常而无法解除锁定,一定要在finally中调用Lock对象的unlock()方法。

Lock接口还定义了tryLock()方法,如果线程调用tryLock()可以取得锁定会返回true,若无法取得锁定并不会发生阻断,而是返回false。

  • 使用ReadWriteLock

ReadWriteLock接口定义了读取锁定与写入锁定行为,可以使用readLock()、writeLock()方法返回Lock操作对象。ReentrantReadWriteLock是ReadWriteLock接口的主要操作类,readLock()方法会返回ReentrantReadWriteLock.ReadLock实例,writeLock()犯法会返回ReentrantReadWriteLock.WriteLock实例。

  • BlockedQueue是Queue的子接口,新定义了put()、take()方法。

  • ConcurrentMap是Map的子接口,其定义了putIfAbsent()、remove()、replace()等方法。这些方法都是原子操作。

  • ConcurrentHashMap是ConcurrentMap的操作类,ConcurrentNavigableMap是ConcurrentMap的子接口,其操作类为ConcurrentSkipListMap,可视为支持并行操作的TreeMap版本。

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

  • 问题一:

    “线程池”是什么?

  • 解决:

  • 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。

java中有四种线程池:

  • 问题二:

    在学习p343时,不正确的使用synchronized会出现“死结”

  • 解决:

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

  • 问题一:在编译p355的代码时,出现以下错误

错误说的是try不带有catch和finally,我检查了代码,try和finally都在,最后我发现在(res)后面少了个‘{’,导致

调整过后,代码无误。

  • 问题二:在编译p377的ProducerConsumerDemo3代码时,出现以下错误

找不到Producer3,我搜查Producer3的代码,发现代码无误,并且能够通过编译,所以不应该会出现以上情况,等在此编译这个代码时,发现无误,所以综上,我当时没有编译Producer3的代码,所以编译新代码时,找不到Producer3关键字。

代码托管

上周考试错题总结

  • 错题一:3

    现有:

    1 . import java.util.*;

    2 .

    3 . Class FindStuff  {

    4 .public static void main (String[]args)    {

    5 ,    //insert code here

    6 .    c.put ("X", 123);

    7 .    }
8 . }

分别插入到第5行,哪几行允许代码编译?

分析:

编译以下三个代码,均能通过。

  • 错题二:5

    现有:

    3.import java.util.*;

    4.class ForInTest  {

    5.static List list=new ArrayList();

    6.

    7.public static void main (String  []  args)  {

    8.list. add("a"); list. add("b");list. add( "c");

    9.    //insert code here

    10 .    System.out.print (o);

    11 .    }

    12.  }

哪一行插入到第9行将导致输出“abc"?

  • 错题三:

    现有:

    9 .  void topGo()  {

    10 .    try  {

    11 .    middleGo();

    12 .      )  catch  (Exception e)  {

    13 .     System.out.print("catch");

    14 .    }

    15 .  }

    16 .  void middleGo()  throws Exception  {

    17 .    go();

    18 .    system.out.print("late middle");

    19 .  }

    20 . void go()  throws ExceptiOn  {

    21 .    throw new Exception();

    22 .  }

如果调用 topGo () ,则结果为:

catch

  • 错题四:
  • 现有:
    1 .  class Propeller2  {

    2 .   pulolic static void main (String[]args)//add code here?

    3 .    {  new Propeller2().topGo();  }

    4 .

    5 .void topGo()  //add code here?

    6 .    {   middleGo();  }

    7 .

    8 .void middleGo()  //add code here?

    9 .    {   go();  System.out.println ("late middle");  }

    10 .

    11 . void go()  //add code here?

    12 .     {throw new Exception();  }

    13 .  }

为使代码通过编译,需要在哪一行加入声明throws Exception?

  • 答案:在第2行、第5行、第8行和第11行

结对及互评

评分标准

  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分

点评过的同学博客和代码

  • 本周结对学习情况

- 结对学习内容
- 学习第十章和第十一章的内容
- 相互请教遇到的问题
- 解决上周考试的错题

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

本周学习了输入输出、线程与API,与第十章相比,十一章的内容不管是难度还是知识点加大了许多,在学习十一章时,时常有许多绕不过弯的地方,还需多看多理解,多深入的学习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 15篇 400小时
第一周 9/9 1/1 20/20
第二周 162/ 171 1/2 25/45 学习java的基础语法
第三周 380/ 551 1/3 25/70 学习java对象及封装
第四周 831/ 1382 1/4 23/93 学习java的继承、接口与多态的运用
第五周 870/2252 1/5 20/113 学习java的异常处理和collection与map
第六周 1304/3493 1/6 22/135 学习java的输入输出、线程与Api,与搭档一起学习
  • 计划学习时间:23小时

  • 实际学习时间:22小时

  • 改进情况:

    本周与上周的计划时间相同,但不同的是这周十一章的内容多、且复杂,所以相对花的时间也较多,还有待改进。

参考资料

[java中的四种线程池](http://cuisuqiang.iteye.com/blog/2019372

20155229 2016-2017-2 《Java程序设计》第六周学习总结的更多相关文章

  1. 20155229 2016-2017-2 《Java程序设计》第九周学习总结

    20155229 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 JDBC(Java DataBaseConnectivity)即java数据库连接 ...

  2. 20155229 2016-2007-2 《Java程序设计》第一周学习总结

    20155229 2016-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 1~18章的提问: 第一章:怎样撰写Java才不会沦于死背API文件.使用"复制. ...

  3. 20155229 2016-2017-2 《Java程序设计》第二周学习总结

    20155229 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 布尔:boolean类型可表示true和false %符号被用来作为控制符号前置,所以规定用 ...

  4. 20155225 2016-2017-2 《Java程序设计》第九周学习总结

    20155225 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 了解JDBC架构 使用JDBC API JDBC是用于执行SQL的解决方案,开 ...

  5. 20155310 2016-2017-2 《Java程序设计》第九周学习总结

    20155310 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 •数据库本身是个独立运行的应用程序 •撰写应用程序是利用通信协议对数据库进行指 ...

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

    20155338 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 · 数据库本身是个独立运行的应用程序 · 撰写应用程序是 ...

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

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

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

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

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

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

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

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

随机推荐

  1. angular组件层次与军事指挥层级职责的联系

    又继续读angular文档,发现自己之前理解还是有误.按官方文档的思路service不是属于component的,是属于module的.module才是负责完整领域逻辑的单位.demo的英雄编辑器给我 ...

  2. English trip -- VC(情景课)5 D

    Read 阅读 Listen and read. 听并读 Notice from Riverside Library Come and visit Riverside Library.The new ...

  3. English trip -- VC(情景课)1 D

    Read 阅读 Welcome! Meet our new student. His first name is Ernesto.  欧内斯托 His last name is Delgado. 德尔 ...

  4. 20161208xlVBA工作表数据导入Access

    Sub InsertToDataBase() Dim DataPath As String Dim SQL As String Const DataName As String = "yun ...

  5. Python练习题--持续更新

    1.你是一个高级测试工程师,现在要做性能测试,需要你写一个函数,批量生成一些注册使用的账号. 产生的账号是以@163.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大 ...

  6. STL_string

    将string对象利用c风格的形式输出函数:  c_str() 栗子:      string s;      printf("%s\n",s.c_str());

  7. 对象不能从 DBNull 转换为其他类型

    SQL语句:select sum (datediff(second,Begin_Time,End_Time)) as 总时长 from 数据表这是我开始的程序:int 总时长=0;总时长 =Conve ...

  8. 一、final关键字

    final关键字修饰:类,方法,基本类型变量,引用,具有不同的意思 1.final修饰类 表示该类不能被继承 package property; public final class Hero ext ...

  9. 如何使用Java Enum

    简单的用法:JavaEnum简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值.如: 性别: public enum SexEnum { male, female; } 颜色: pub ...

  10. POJ 3220 位运算+搜索

    转载自:http://blog.csdn.net/lyhypacm/article/details/5813634 DES:相邻的两盏灯状态可以互换,给出初始状态.询问是否能在三步之内到达.如果能的话 ...