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

参考资料

posted @ 2016-04-10 14:29  20145228江苒  阅读(118)  评论(0编辑  收藏  举报