您的位置:首页 > 编程语言 > Java开发

20145337 《Java程序设计》第六周学习总结

2016-04-10 19:32 513 查看

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/2002/220/20
第二周300/5002/418/38
第三周500/10003/722/60
第四周300/13002/930/90
第五周200/13002/915/90
第六周200/13002/915/90

参考资料

Java学习笔记(第8版)

《Java学习笔记(第8版)》学习指导

...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: