java集合及線程

這裏寫圖片描述
Collection是結合的頂層接口,它的子體系有重複的;it.hasNext()不能夠經常使用,因爲每使用一次就獲取一次對象。
這裏寫圖片描述

這裏寫圖片描述
迭代器遍歷集合,集合修改元素會出現ConcurrentModificationException的錯誤;避免這樣的問題就是集合遍歷集合修改,或者迭代器遍歷,迭代器修改。

1:要想了解多線程,必須先了解線程,而要想了解線程,必須先了解進程,因爲線程是依賴於進程而存在。

2:什麼是進程?
通過任務管理器我們就看到了進程的存在。
而通過觀察,我們發現只有運行的程序纔會出現進程。
進程:就是正在運行的程序。
進程是系統進行資源分配和調用的獨立單位。每一個進程都有它自己的內存空間和系統資源。

3:多進程有什麼意義呢?
單進程的計算機只能做一件事情,而我們現在的計算機都可以做多件事情。
舉例:一邊玩遊戲(遊戲進程),一邊聽音樂(音樂進程)。
也就是說現在的計算機都是支持多進程的,可以在一個時間段內執行多個任務。
並且呢,可以提高CPU的使用率。

問題:
    一邊玩遊戲,一邊聽音樂是同時進行的嗎?
    不是。因爲單CPU在某一個時間點上只能做一件事情。
    而我們在玩遊戲,或者聽音樂的時候,是CPU在做着程序間的高效切換讓我們覺得是同時進行的。

4:什麼是線程呢?
在同一個進程內又可以執行多個任務,而這每一個任務我就可以看出是一個線程。
線程:是程序的執行單元,執行路徑。是程序使用CPU的最基本單位。
單線程:如果程序只有一條執行路徑。
多線程:如果程序有多條執行路徑。

5:多線程有什麼意義呢?
多線程的存在,不是提高程序的執行速度。其實是爲了提高應用程序的使用率。
程序的執行其實都是在搶CPU的資源,CPU的執行權。
多個進程是在搶這個資源,而其中的某一個進程如果執行路徑比較多,就會有更高的機率搶到CPU的執行權。
我們是不敢保證哪一個線程能夠在哪個時刻搶到,所以線程的執行有隨機性。一個進程內又可以執行多個任務,而每個任務都可以看着是一個線程,線程是程序使用CPU的最基本單元。
run()和start()方法的區別:run()方法僅僅是封裝被線程執行的代碼,直接調用的是普通的方法,start()是首先啓動了線程,然後由JVM去調用線程的run()方法。

線程的生命週期

同步代碼塊的鎖對象是任意對象;同步方法的格式及鎖對象是this,靜態方法的所對象是類的字節碼文件對象。

如果出現了同步嵌套,就容易產生死鎖的問題;
死鎖:兩個或兩個以上線程資源爭奪資源的過程,發生的一種相互等待的現象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章