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


    20145225《Java程序设计》

    第6周学习总结

    教材学习内容总结

    第十章 输入/输出

    10.1InputStream与OutputStream

    1. 串流:衔接数据的来源和目的地就是串流对象。

    2. 串流继承架构。

    3. 串流处理装饰器:装饰器知识对数据进行了一些加工处理,例如缓冲、串行化、数据装换等。

    可以使用System的setIn()方法指定InputStream实例,重新指定标准输入来源。例如下面范例故意将标准输入指定为FileInputStream,可以读取指定文档并显示在文本模式:Stream StandardIn.java:

    public class StandardIn {  
    public static void main(String[] args) throws IOException {  
        System.setIn(new FileInputStream(args[0]));  
        try (Scanner scanner = new Scanner(System.in)) {  
            while (scanner.hasNextLine()) {  
                System.out.println(scanner.nextLine());  
            }  
        }  
    }  
    }  
    }
    

    10.2字符处理类

    1. Reader Writer:抽象化了数据读入和写出的目的地,会将读入的数据植入char数组中。

    2. 字符处理装饰器:可以使用BufferReader和BufferWriter将数据进行缓冲,增加读写效率。

    import java.io.*;
    public class CharUtil {
    public static void dump(Reader src, Writer dest) throws IOException {
        try(Reader input = src; Writer output = dest) {
            char[] data = new char[1024];
            int length;
            while((length = input.read(data)) != -1) {
                output.write(data, 0, length);
            }
        }
     }
    }
    

    第十一章 线程与并行API

    9.1线程

    1.通过创建Thread实例来执行Runnable实例定义的> run方法可以实现多个线程。

    2.继承Thread类也可以进行多个进程,但没有Runnable的弹性好,运用Lambda表达式也可以简化程序。

    3.线程生命周期:Daemon:在所有的非Daemon线程结束时,JVM就会自动终止

    4.ThreadGroup:用来管理群组中的线程,enumerate可以取得群组中的所有线程,activecount()用来取得线程的数量。

    5.synchronized&&volatile:线程存取同一对象相同资源时可能会引发竞速情况。

    6.等待与通知:wait()、notify()、notifyall()控制线程释放对象的锁定。

    9.2并行API

    1.Lock、Condition、ReadWriteLock。

    2.Executor:HashMap、TreeMap为两个常用操作类。

    3.并行Collection:CopyOnWriteArraySet操作set接口,使用于一个很少进行写入操作,而使用迭代器频繁的情境。

    public class ThreadGroupDemo {
    public static void main(String[] args) {
        ThreadGroup group = new ThreadGroup("group") {
            @Override
            public void uncaughtException(Thread thread, Throwable throwable) {
                System.out.printf("%s: %s%n",
                        thread.getName(), throwable.getMessage());
            }
        };
    
        Thread thread = new Thread(group, () -> {
            throw new RuntimeException("测试异常");
        });
    
        thread.start();
      }
    }
    

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

    本周代码见代码托管https://git.oschina.net/nizaikanwoba/java-besti-is-2015-2016-2-20145225

    其他(感悟、思考等,)

    好好学。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
    目标 5000行 30篇 400小时
    第一周 150/150 2/2 15/15
    第二周 150/300 1/3 15/30
    第三周 200/500 1/4 15/45
    第四周 200/700 1/5 15/60
    第五周 200/900 1/6 15/75
    第六周 200/1100 1/7 15/80

    参考资料

  • 相关阅读:
    webservice发布时一个奇怪的错误
    这样的正版验证
    谁在要你的命
    执行存储过程时候的一个非常奇怪的性能问题
    比尔·盖茨在哈佛大学毕业典礼上的演讲
    接口与抽象类
    系统分析师.Net俱乐部QQ群
    Qt遍历图片文件
    Qt实现数组的乱序排列
    关于Outlook删除原邮箱邮件的解决办法
  • 原文地址:https://www.cnblogs.com/nizaikanwoma/p/5375558.html
Copyright © 2020-2023  润新知