zoukankan      html  css  js  c++  java
  • 20145105 《Java程序设计》第6周学习总结

    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

    参考资料

  • 相关阅读:
    IAccessible ( 一 )
    object sender,EventArgs e的一些讲解
    C# 操作符重载
    MSAA简介
    小试NArrange
    C++宏
    Ext.form.ComboBox简单用法
    SQL SERVER 收缩数据库的命令
    ext.grid的配置属性和方法
    磁盘阵列
  • 原文地址:https://www.cnblogs.com/schwarizard/p/5376515.html
Copyright © 2011-2022 走看看