zoukankan      html  css  js  c++  java
  • 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

    参考资料

  • 相关阅读:
    HDU1879 kruscal 继续畅通工程
    poj1094 拓扑 Sorting It All Out
    (转)搞ACM的你伤不起
    (转)女生应该找一个玩ACM的男生
    poj3259 bellman——ford Wormholes解绝负权问题
    poj2253 最短路 floyd Frogger
    Leetcode 42. Trapping Rain Water
    Leetcode 41. First Missing Positive
    Leetcode 4. Median of Two Sorted Arrays(二分)
    Codeforces:Good Bye 2018(题解)
  • 原文地址:https://www.cnblogs.com/5337my/p/5375059.html
Copyright © 2011-2022 走看看