• 20145337 《Java程序设计》第六周学习总结


    20145337 《Java程序设计》第六周学习总结

    教材学习内容总结

    输入输出

    InputStream与OutputStream

    • 从应用程序角度来看,如果要将数据从来源取出,可以使用输入串流;如果要将数据写入目的地,可以使用输出串流。在Java中,输入串流代表对象为java.io.InputStream实例,输出串流代表对java.io.OutputStream实例。无论数据源或目的地为何,只要设法取得InputStream或OutputStream的实例,接下来操作输入/输出的方式都是一致的,无须理会来源或目的地的真正形式。

    • FileReader、FileWriter则可以对文档做读取与写入,读取或写入时默认会使用操作系统默认编码来做字符转换。在启动JVM时,可以指定-Dfile.encoding来指定FileReader、FileWriter所使用的编码。

    • Reader、Writer中也有一些装饰器类,InputStreamReader和OutputStreamWriter可以对串流数据打包,BufferedReader、BufferedWriter可对Reader、Writer提供缓冲区作用,在处理字符输入/输出时,对效率也会有所帮助。PrintWriter与PrintStream使用上极为类似,不过除了可以对OutputStream打包之外,PrintWriter还可以对Writer进行打包,提供print()、println()、format()等方法。

    线程与并行

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

    • JVM是台虚拟计算机,只安装一颗称为主线程的CPU,可执行main()定义的执行流程。如果想要为JVM加装CPU,就是创建Thread实例,要启动额外CPU就是调用Thread实例的start()方法,额外CPU执行流程的进入点,可以定义在Runnale接口的run()方法中。

    • 操作Runnable接口的好处就是较有弹性,你的类还有机会继承其他类。若继承了Thread,那该类就是一种Thread,通常是为了直接利用Thread中定义的一些方法,才会继承Thread来操作。

    • 线程存取同一对象相同资源时可能引发竞速情况,这样的类为不具备线程安全的类;

    • 每个对象都会有个内部锁定,或称为监控锁定。

    教材上的代码

    ```
    package cc.openhome;
    
    import java.util.concurrent.BlockingQueue;
    
    public class Consumer3 implements Runnable {
    private BlockingQueue<Integer> productQueue; 
    
    public Consumer3(BlockingQueue<Integer> productQueue) { 
    this.productQueue = productQueue; 
    } 
    
    public void run() { 
    System.out.println("消费者开始消耗整数......"); 
    for(int i = 1; i <= 10; i++) { 
    try {
    int product = productQueue.take();
    System.out.printf("消费者消费整数 (%d)%n", product);
    } catch (InterruptedException ex) {
    throw new RuntimeException(ex);
    }
    } 
    } 
     }
    ```
    ```
    package cc.openhome;
    
    import java.net.URL;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class Download3 {
    public static void main(String[] args) throws Exception {
    URL[] urls = {
    new URL("http://openhome.cc/Gossip/Encoding/"),
    new URL("http://openhome.cc/Gossip/Scala/"),
    new URL("http://openhome.cc/Gossip/JavaScript/"),
    new URL("http://openhome.cc/Gossip/Python/")
    };
    
    String[] fileNames = {
    "Encoding.html",
    "Scala.html",
    "JavaScript.html",
    "Python.html"
    };
    
    ExecutorService executorService = Executors.newCachedThreadPool();
    new Pages(urls, fileNames, executorService).download();
    executorService.shutdown();
    }
    }
    ```
    

    本周代码托管截图


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

    这两章的学习较八九章更为吃力,这周实验多多,安排给看书的时间比较少,还是决定把书上的代码都亲自敲,只是看还是有点似懂非懂。编辑实验练习题目时就发现缺少自己编代码的过程,不过还是把书上的知识点先看明白吧

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 18/38
    第三周 500/1000 3/7 22/60
    第四周 300/1300 2/9 30/90
    第五周 200/1300 2/9 15/90
    第六周 200/1300 2/9 15/90

    参考资料

  • 相关阅读:
    时间记录日志
    软件工程作业02
    个人学习进度(第二周)
    《大道至简》第二章读后感
    《大道至简》第一章读后感
    构建之法阅读笔记02
    构建之法阅读笔记01
    web开发
    Tomcat的安装与环境配置
    java-10异常处理动手动脑
  • 原文地址:https://www.cnblogs.com/5337my/p/5375059.html
Copyright © 2020-2023  润新知