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. 让flask在出现语法错误时仍然自动重启

    1问题描述: flask自带的reload只能在语法没毛病的情况下auto_relaod,但是如果有语法错误,进程就会报错退出. 这时修改完语法错误,还得在控制台按“↑”和“enter”重新执行一次p ...

  2. Codeforces 827C - DNA Evolution

    827C - DNA Evolution 思路: 写4*10*10个树状数组,一个维度是4(ATCG),另一个维度是长度len,另一个维度是pos%len,因为两个pos,如果len和pos%len相 ...

  3. 正则表达式中 (?=pattern) (?!pattern) (?<=pattern) (?<!pattern) 的使用

    2018-08-06 12:33:58 StackOverFlow上有个如下的问题: 这里就会用到正向肯定预查(?=pattern):

  4. websphere设置企业应用使用的jvm最大最小内存

    websphere设置企业应用使用的jvm最大最小内存 设置jvm 内存的最大最小值.打开was管理控制台  点击应用程序服务器-----server1  点击java和进程管理前面的加号  点击进程 ...

  5. python-day65-django基础

    一.MTV模型 1.官方说明: Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务 ...

  6. python-day3笔记

    1.通信是软件(计算机)与软件(计算机)之间的通信 2.网络指的是: 一:计算机与计算机之间通过物理连接介质(网络设备)连接到一起:光纤--物理连接介质,和网线一样. 二:计算机与计算机之间基于网络协 ...

  7. SQL优化(SQL TUNING)可大幅提升性能的实战技巧之一——让计划沿着索引跑

    我们进行SQL优化时,经常会碰到对大量数据集进行排序,然后从排序后的集合取前部分结果的需求,这种情况下,当我们按照常规思路去写SQL时,系统会先读取过滤获得所有集合,然后进行排序,再从排序结果取出极少 ...

  8. java并发带返回结果的批量任务执行(CompletionService:Executor + BlockingQueue)

    转载:http://www.it165.net/pro/html/201405/14551.html 一般情况下,我们使用Runnable作为基本的任务表示形式,但是Runnable是一种有很大局限的 ...

  9. intel python加速效果初探

    python3安装intel的加速库: conda config --add channels intel conda create --name intelpy intelpython3_full ...

  10. python里实现DSL

    以后用到的话可以参考如下链接: http://safehammad.com/downloads/domain-specific-languages-and-python-2011-04-21.pdf ...