20145313张雪纯 《Java程序设计》第6周学习总结 20145313张雪纯 《Java程序设计》第6周学习总结

教材学习内容总结

  • 将数据从来源中取出,可以使用输入串流;将数据写入目的地,可以使用输出串流。
  • 输入串流代表对象为java.io.InputStream实例,输入串流代表对象为java.io.OutputStream实例。
  • 不使用InputStream与OutputStream时必须使用close()方法关闭串流。
  • FileInputStream是InputStream的子类,可以指定文件名创建实例,一旦创建文档就开启,可用来读取数据。FileOutputStream是OutputStream的子类,可以指定文件名创建实例,一旦创建文档就开启,可用来写出数据。
  • 无论用FileInputStream还是FileOutputStream,不使用时都要用close()来关闭文档。
  • FileReader、FileWrite可以对文档做读取与写入,读取或写入时会默认使用操作系统默认编码来做字符转换。
  • 若想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run()方法中。
  • 如果主线程中启动了额外线程,默认会等待被启动的所有线程都执行完run()方法才中止JVM。
  • 线程有优先权,可使用Thread的setPriority方法设定优先权。
  • 线程完成run()方法后就会进入Dead,进入Dead的线程不可以再次调用start()方法。

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

p345,有关volatile部分不太清楚。
package cc.openhome;

class Variable1 {
    static int i = 0, j = 0;

    static void one() {
        i++;
        j++;
    }

    static void two() {
        System.out.printf("i = %d, j = %d%n", i, j);
    }
}

public class Variable1Test {
    public static void main(String[] args) {
        Thread thread1 = new Thread(() -> {
            while (true) {
                Variable1.one();
           }
            });
    Thread thread2 = new Thread(() -> {
            while (true) {
                Variable1.two();
            }
        });
    
        thread1.start();
        thread2.start();
    }
}

为何结果会有时出现j远大于i的情况?

代码托管

20145313张雪纯 《Java程序设计》第6周学习总结
20145313张雪纯 《Java程序设计》第6周学习总结
20145313张雪纯 《Java程序设计》第6周学习总结
20145313张雪纯 《Java程序设计》第6周学习总结
20145313张雪纯 《Java程序设计》第6周学习总结
20145313张雪纯 《Java程序设计》第6周学习总结

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 1/1 20/20 编写简单程序
第二周 350/550 1/2 30/30 用IDE调试修改程序
第三周 500/1050 1/3 35/85
第四周 500/1550 1/4 30/115
第五周 500/2050 1/5 30/145
第六周 700/2750 2/7 30/175

参考资料