zoukankan      html  css  js  c++  java
  • 20155220 2016-2017-2 《Java程序设计》第六周学习总结

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

    教材学习内容总结

    第十章 输入输出

    10.1 InputStream OutputStream

    • 数据有来源与目的,衔接两者的是串流对象。

    • read()方法每次尝试读取数据,并返回实际读入的,只要不是-1,就表示读到数据。write()方法,指定要写出的数组,初始索引与数据长度。

    • System.inSystem.out分别是InputStream和OutputStream的实例。可以使用Syestem.setIn()方法,重新指定标准输入来源。

    • FileInputStream与FileOutputSteam:指定文件名创建实例,开启,然后读取,写入数据,不使用时要用close()关闭。

    • 装饰器为输入/输出的数据做处理,例如缓冲、串行化、数据装换等。

    • BufferedInputStreamBufferedOutoutStream:提供缓存区,提高效率。DateInputStreamDateOutputStream:自动转化类型。ObjectInputStreamObjectInputStream将数据读入或写出为对象。

    10.2 字符处理类

    • Reader与Writer读入或者写入字符。

    • FileReaderFileWriter可以对文档作读取或写入,默认会使用操作系统默认编码。

    • InputStreamReader和OutputStreamWriter:将字节数据转换为对应的编码字符。BufferedReaderBuffereWriter:提供缓存区,提高效率。

    第十一章 线程与并行API

    11.1 线程

    • 有时候需要设计程序拥有多个流程,也就是多线程程序。类操作java.lang.Runnable接口,接入点是run();通过Thread实例来执行Runnable实例定义的run方法,启动线程必须调用Thread的start方法。

    • 操作Runnable接口有弹性,还有机会继承别的类。

    • Deamon线程:如果一个Thread标示为Deamon,在所有非Deamon线程结束时,JVM自动会终止。

    • Thread基本状态图:优先权高的先执行,否则输流执行。start——>runnable——>(blocked)——>running——>dead

    • sleep、wait阻断等都会让线程进入blocked状态,运用多线程,避免cpu空闲下来,是改进效能的方式之一。

    • 安插线程:join方法,先完成插入的线程,再回到原来的线程。

    • 停止线程:最好自行操作,让线程跑完应有的流程。

    • 每个线程都属于某个线程组群,可以自行定义线程组群。线程一旦归入某个群组,就无法更换。

    • 线程存取同一对象相同资源时可能会引发竞速情况(RaceCondition)。在竞速情况下,脱离原本应管控的条件的类为不具备线程安全的类。

    • synchronized:在方法上加上synchronized关键字,或者在描述句上加上它。如果使用不当会造成死结。执行该方法必须获得该实例的锁定。

    • wait(),notify(),notifyall()是object定义的方法,可以通过他们控制线程释放对象的锁定,或者通知线程参与锁定竞争。-

    11.2 并行API

    • lock:可以lock()取得对象锁定和unlock()解除锁定。调用trylock()时,如果不能锁定并不会发生阻断,而是返回fouse,无论成功与否都要解除锁定。

    • RwadWriteLock接口:定义了读取锁定与写入锁定行为,提高效率。StampedLock:用来操作乐观读取,用于读取线程多而写入线程少的情况。先判断,再考虑是否真正锁定。Condition:取得多个conditon实例,可以有多个等待集合,提高效率。

    • Executor接口可以将Runnable的指定与实际如何执行分离。Future与Callable搭配使用。

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

    • 问题:在一个类中向OutputStream里面写数据,而另一个类则从InputStream中读取这些数据。如何才能把OutputStream里的数据转换为InputStream里的数据呢?

    • 解决方案:

      1、使用byte数组作为缓存(必须有足够大的缓存来保存所有的数据);

      2、使用管道。

    代码托管

    上周考试错题总结

    点评过的同学博客和代码

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第二周 40/100 1/2 8/20
    第三周 100/150 1/3 18/26
    第四周 465/605 1/4 23/49
    第五周 527/1132 1/5 35/84
    第六周 1044/ 2176 1/6 60/144
  • 相关阅读:
    2019-2020-1 20199302《Linux内核原理与分析》第九周作业
    MySQL 优化
    ElasticSearch实战
    redis实战
    ElasticSearch
    Zookeeper
    redis
    Jenkins 持续交付
    JDK 1.8 新特性之Stream
    cat-监控系统
  • 原文地址:https://www.cnblogs.com/20155220wsq/p/6658597.html
Copyright © 2011-2022 走看看