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的情况?
代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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 |