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


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

    教材学习内容总结

    第十章 输入/输出

    数据流

    1. I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出。
    2. Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取出,可以使用输入传流,如果要将数据写入目的地,可以使用输出串流。
    3. 在java中,输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutStream实例。

    InputStream与OutputStream

    • InputStream不关心数据源来自何种设备(键盘,文件,网络);
      OutputStream不关心数据的目的是何种设备(键盘,文件,网络)

    • 提供串流基本操作,如果想要为输入/输出的数据做加工处理,则可以使用打包器类。

    • 子类一: FileInputStream,FileOutputStream。适用于文件的创建和读写。这两个子类在不使用时都要用close()关闭文档。

    • 子类二:ByteArryInputStream,ByteArryOutputStream。指定byte数组创建实例,一旦创建就可将byte数组当做数据源进行读写。

    Reader与Writer

    1. 字符数据的读取:java.io.Reader类,其抽象化了字符数据读入的来源;字符数据的写入:java.io.Writer类。其抽象化了数据写出的目的地。

    第十一章 线程与并行API线程

    线程

    • 单线程:
      启动的程序从main()程序进入点开始至结束只有一个流程。

    • 多线程:要设计程序可以拥有多个程序。即在main以外独立设计流程。

    实现多线程

    1. 撰写类操作**java.lang.Runnable接口。操作进入点:run();
    2. 创建Thread实例来执行Runnable实例定义的run()方法,启动线程执行指定的线程,调用Thread实例的start()方法。
    3. 继承Thread类。

    并行API

    使用Thread建立多线程程序,必须亲自处理synchornized、对象锁定、wait()、notify()、notifyAll()等细节,如果需要的是线程池、读写解锁高等级操作,从JDK5之后提供了java.util.concurrent,可基于其中的API建立更稳固的并行应用程序。
    并行API可以分为以下几个类.
    1.Lock、ReadWriter与Condition
    2.使用Executor
    3.并行Collection

    Lock、ReadWriteLock

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

    • ReadWriteLock接口定义了读取锁定与写入锁定行为,可以使用readLock()、writeLock()方法返回Lock操作对象。

    • StampedLock类可支持了乐观读取操作。也就是若读取线程很多,写入线程很少的情况下,你可以乐观地认为,写入与读取同时发生的机会很少,因此不悲观的使用哇暖的读取锁定,程序可以查看数据读取之后,是否遭到写入线程的变更,再采取后续的措施。

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

    如上图所示,用红线标注的地方是我习惯性的删减代码所导致的错误,将鼠标光标移动到该错误的位置显示如下图:

    说是一定要用数组的形式定义,我仔细看了看代码,想这可能是由于代码中下面这句代码的原因。

    boolean sleep=flags[(int)((Math.random()*10)%2)];
    
    

    于是我就直接将代码修改改成这样:private boolean flags[]={};

    结果是没有兔子的身影:

    于是利用刚学的断点调试程序发现flags的值是null:

    终于经过了认真排查有了正确结果显示:

    如果再运行一次会出现不一样的结果:

    本周代码托管截图

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

    本周在经过一次试验后,我觉得对于java的运行环境有新的了解,对于代码调试什么的有可以熟练的运用对于我将来的自己编代码有了很大的用处。而且本周还解决了一直对于java的包,类,项目的关系的理解,受益颇深。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 3500行 30篇 400小时
    第一周 100/100 1/1 20/20
    第二周 200/300 1/2 30/50
    第三周 300/600 1/3 28/78
    第四周 300/900 1/4 20/98
    第五周 300/900 1/5 30/128
    第六周 300/1200 2/6 32/ 160

    参考资料

  • 相关阅读:
    关于二进制的利用
    2017年浙江中医药大学程序设计竞赛 Solution
    2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest Solution
    2018-2019 ACM-ICPC, Asia Shenyang Regional Contest Solution
    2018-2019 ACM-ICPC, Asia Nanjing Regional Contest Solution
    AtCoder Grand Contest 029 Solution
    BZOJ 3307: 雨天的尾巴
    Codeforces Round #526 (Div. 2) Solution
    2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) Solution
    [HZNUOJ] 博
  • 原文地址:https://www.cnblogs.com/yayaer/p/5376320.html
Copyright © 2020-2023  润新知