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;html

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的狀況?java

代碼託管



學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 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

參考資料

相關文章
相關標籤/搜索