多執行緒和雜湊的一點筆記

2021-10-06 15:40:09 字數 1032 閱讀 8971

一、多執行緒

單核cpu:是沒有併發處理的概念,乙個核只能同時處理做一件事情。多個事情可以交替執行。

臨界資源:某一時刻只能屬於乙個執行緒使用。

併發安全問題:多個執行緒同時去爭搶乙個臨界資源,引發的問題。

單例模式中的執行緒安全問題:

1、沒有if判斷的,直接在成員變數那裡初始化例項,不會產生執行緒安全問題,但會產生阻塞的情況。

2、有if判斷,在if判斷裡new乙個例項物件,會產生執行緒安全問題。

3、getsingleton 靜態方法加了synchronized 關鍵字。不會產生執行緒安全問題。這是 加了一把類鎖。

4、synchronized 同步**塊,加的是類鎖。synchronized 前後都有if(singleleton == null)的判斷,會產生執行緒安全問題。需要對成員變數singleton 加乙個 volatile 關鍵字:禁止指令重排序。

new singleleton()時,指令重排序。

開闢空間。

初始化物件,可能該執行緒還沒進行初始化,其他執行緒就進來了,進行了初始化,那麼該執行緒的物件是不可用的。

賦值。執行緒安全的三個特點:

原子性:(一次執行完成)

有序性:(按照一定循序來執行)

可見性:(其他執行緒也要可以看到這個改變)

賦值操作是原子操作。但是long的賦值不是原子操作。8個位元組,分成2個4位元組來賦值。

雜湊

雜湊演算法的目的就是為了驗證原始資料是否被篡改。

雜湊碰撞就是不同的值通過相同的雜湊函式生成了相同的雜湊值。

雜湊碰撞不能夠避免。

解決方法:

1.開放位址法:產生碰撞後,往後排就好,直到沒有碰撞。

2.再雜湊。 發生碰撞,再進行雜湊,有可能頻繁雜湊。

3.鏈位址法:產生碰撞,相應的桶中形成鍊錶。

雜湊表:採用雜湊演算法將記錄儲存在一塊空間內,這塊空間就叫雜湊表。

影響雜湊表的查詢效能因素:

1、雜湊函式是否均勻。

2、解決雜湊衝突的方法。

3、雜湊表的裝載因子。

php一點筆記

1.replace函式作用 替換字串中匹配到的預先定義的正規表示式的內容 3.建立與資料庫的連線 db mysql connect localhost root or die could not connect mysql error mysql select db register or die ...

Redis的一點筆記

優勢之三原子 什麼是原子性,什麼是原子性操作?舉個例子 a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 如果在a的帳戶已經減去了1000塊錢的時候,忽然發生了意外,比如停電什麼的,導致轉帳事務意外終止了,而此時b的...

jdbc一點小筆記

jdbc的常用介面的步驟,1使用driver或者class.forname 進行註冊驅動 2使用drivermanager進行獲取資料庫的鏈結 使用connection獲取語句物件 使用語句物件介面statement方法執行查詢或更新操作 查詢的resultset是結果集使用之前一定要先判斷是否存在...