Java基礎重點回顧

2021-07-01 22:39:28 字數 1938 閱讀 4293

執行緒

執行緒是程式執行的一條路徑, 乙個程序中可以包含多條執行緒

多執行緒併發執行可以提高程式的效率, 可以同時完成多項工作

多執行緒實現的兩種方式

一種是繼承thread:

public class demo2_thread }}

class mythread extends thread

}}

另一種是實現runnable介面

public class demo3_runnable }}

class myrunnable implements runnable

}}

這兩種方式的區別

檢視原始碼的區別:

繼承thread : 由於子類重寫了thread類的run(), 當呼叫start()時, 直接找子類的run()方法

實現runnable : 建構函式中傳入了runnable的引用, 成員變數記住了它, start()呼叫run()方法時內部判斷成員變數runnable的引用是否為空, 不為空編譯時看的是runnable的run(),執行時執行的是子類的run()方法

繼承thread

好處是:可以直接使用thread類中的方法,**簡單

弊端是:如果已經有了父類,就不能用這種方法

實現runnable介面

好處是:即使自己定義的執行緒類有了父類也沒關係,因為有了父類也可以實現介面,而且介面是可以多實現的

弊端是:不能直接使用thread中的方法需要先獲取到執行緒物件後,才能得到thread的方法,**複雜

多執行緒併發操作同一資料時, 就有可能出現執行緒安全問題

使用同步技術可以解決這種問題, 把運算元據的**進行同步, 不要多個執行緒一起操作

通訊

多個執行緒併發執行時, 在預設情況下cpu是隨機切換執行緒的

如果我們希望他們有規律的執行, 就可以使用通訊, 例如每個執行緒執行一次列印

怎麼通訊

如果希望執行緒等待, 就呼叫wait()

如果希望喚醒等待的執行緒, 就呼叫notify();

notifyall()方法是喚醒所有執行緒

這兩個方法必須在同步**中執行, 並且使用同步鎖物件來呼叫

什麼是介面卡

在使用***的時候, 需要定義乙個類事件***介面.

通常介面中有多個方法, 而程式中不一定所有的都用到, 但又必須重寫, 這很繁瑣.

介面卡簡化了這些操作, 我們定義***時只要繼承介面卡, 然後重寫需要的方法即可.

介面卡原理

介面卡就是乙個類, 實現了***介面, 所有抽象方法都重寫了, 但是方法全是空的.類設為抽象 ,不讓其他類建立本類物件呼叫本類方法,沒有私有構造,為了讓子類重寫本類方法。

目的就是為了簡化程式設計師的操作, 定義***時繼承介面卡, 只重寫需要的方法就可以了.

什麼情況下需要同步

當多執行緒併發, 有多段**同時執行時, 我們希望某一段**執行的過程中cpu不要切換到其他執行緒工作. 這時就需要同步.

如果兩段**是同步的, 那麼同一時間只能執行一段, 在一段**沒執行結束之前, 不會執行另外一段**.

同步**塊

使用synchronized關鍵字加上乙個鎖物件來定義一段**, 這就叫同步**塊

多個同步**塊如果使用相同的鎖物件, 那麼他們就是同步的

class printer 

}public static void print2()

}}

STL重點回顧

1.兩級空間配置器 2.vector 是個動態陣列,隨著元素的加入,它的內部機制能夠自行的擴充空間容納新元素 但是當使用insert和erase時會出現迭代器失效問題 他們的建立和銷毀都是用construct和destory函式 因為vector是連續儲存的,所以erase時,會呼叫泛型函式copy...

NA重點回顧

arp位址解析協議 arp的分類 正向arp 逆向arp arp 無故arp。作用 1 正向arp 知道對方的ip不知道對方的mac位址時,傳送arp,獲取對方的mac位址 2 逆向arp 知對方的mac不知道ip,獲取對方的ip 2 無故arp 往外公布自己的mac,和防止位址重複。3 arp 向...

爬蟲重點回顧

閱讀網頁和解碼 1 建立請求 2 開啟目標網頁 3 閱讀網頁 4 解碼 5 找關鍵 分析 6 根據規律使用正規表示式 7 檔案讀寫 請求的時候,可以使用預設的request請求 當然也可以自定義請求物件 request.request 在自定義的請求物件中可以加入請求頭 請求頭的作用是反爬蟲,模擬不...