20145228《Java程序设计》第六周学习总结
教材学习内容总结
串流
·Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象。
·从应用程序角度来看,如果要将数据从来源取出,可以使用输入串流,如果要将数据写入目的地,可以使用输出串流。
·在Java中,输入串流代表对象为java.io.Inputstream实例,输出串流代表对象为java.io.OutputStream实例。
·如果要从HTTP服务器读取某个网页,并另存为文档,也可以使用这里设计的dump()方法。
package cc.openhome;
import java.io.*;
import java.net.URL;
public class Download{
public static void main(String[] args) throws IOException{
URL url = new URL(args[0]);
InputStream src = url.openStream();
OutputStream dest = new FileOutputStream(args[1]);
IO.dump(src,dest);
}
}
·如果串流处理的字节数据,实际上代表某些字符的编码数据,而你想要将这些字节数据转换为对应的编码字符,可以使用InputStreamReader、OutputStreamWriter对串流数据打包。
·如果想从来源读入字符数据,或将字符数据写至目的地,都可以使用CharUtil.dump()方法。
线程与并行API
·撰写多线程的方法:
1~将流程定义在Runnable的run()中
2~继承Thread类,重新定义run()方法
·线程有其优先权,可使用Thread的setPriority()方法设定优先权,可设定值为1到10,默认是5,数字越大优先权越大,如果优先权相同,则输流执行。
package cc.openhome;
class Resource {
private String name;
private int resource;
Resource(String name, int resource) {
this.name = name;
this.resource = resource;
}
String getName() {
return name;
}
synchronized int doSome() {
return ++resource;
}
synchronized void cooperate(Resource resource) {
resource.doSome();
System.out.printf("%s 整合 %s 的资源%n",
this.name, resource.getName());
}
}
public class DeadLockDemo {
public static void main(String[] args) {
Resource resource1 = new Resource("resource1", 10);
Resource resource2 = new Resource("resource2", 20);
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
resource1.cooperate(resource2);
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
resource2.cooperate(resource1);
}
});
thread1.start();
thread2.start();
}
}
·如果在方法上标示synchronized,则执行方法必须取得该实例的锁定。JAVA的synchronized提供的是可重入同步(取得锁定的对象是同一个,则可以直接执行)
教材学习中的问题和解决过程
package cc.openhome;
public class TortoiseHareRace2 {
public static void main(String[] args) {
Tortoise tortoise = new Tortoise(10);
Hare hare = new Hare(10);
Thread tortoiseThread = new Thread(tortoise);
Thread hareThread = new Thread(hare);
tortoiseThread.start();
hareThread.start();
}
}
这就是用Thread实例来执行Runnable实例定义的run()方法。在这个程序中,主程序执行main()定义的流程,main()定义的流程中建立了tortoiseThread与hareThread两个线程,他们分别执行两个流程。
学习感悟
转眼间,这本书已经学习了一大半了,在这短短的一个多月里,我的收获还是很大的,了解到Java的基本架构和各类简单语法。我相信,经过几个月的深度JAVA学习,JAVA水平一定会更上一层楼。
本周代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 4000行 | 20篇 | 300小时 | |
第一周 | 100/100 | 1/1 | 15/15 | |
第二周 | 300/400 | 1/2 | 25/40 | |
第三周 | 500/900 | 1/3 | 35/75 | |
第四周 | 400/1300 | 1/4 | 30/105 | |
第五周 | 500/1800 | 1/5 | 35/140 | |
第六周 | 400/2200 | 2/7 | 30/170 |