Java多執行緒之執行緒安全策略 同步容器

2021-08-19 22:10:02 字數 1505 閱讀 6211

同步容器只是執行緒安全性更好一些,在**執行邏輯中並不一定是執行緒安全的。也就是同步容器本身是執行緒安全的,但是主要還是注意你的**邏輯。

一、非執行緒安全的集合對應的同步容器

vector實現了

list

介面,vector

裡面的方法都是用

sync

修飾過的。

stack也是同步容器,也是使用

sync

實現同步,繼承

vector

,裡面儲存的資料是先進後出。

hashtable實現了

map介面,裡面方法用

sync

修飾。二、vector

@slf4j

public class vectorexample1 catch (exception e)

countdownlatch.countdown();

});}

countdownlatch.await();

executorservice.shutdown();

log.info("size:{}", list.size());

}private static void update(int i)

}

執行可以看到,得到5000,vector是執行緒安全的。

但我們之前強調的**邏輯導致同步容器執行緒不安全是這樣的:

public class vectorexample2 

thread thread1 = new thread() }};

thread thread2 = new thread() }};

thread1.start();

thread2.start();}}

}

比如同一時刻,執行緒1remove(9),而執行緒2get(9)就會出現陣列越界異常。

這就是同步容器裡面的兩個同步方法,因為操作順序的差異,不同的執行緒裡面出現執行緒不安全問題。

三、collection.synchronized***

synchronizedlist、

synchronizedset

、synchronizedmap

都會生成集合的同步容器。

@slf4j

public class setexample catch (exception e)

countdownlatch.countdown();

});}

countdownlatch.await();

executorservice.shutdown();

log.info("size:{}", set.size());

}private static void update(int i)

}

可以看到執行緒安全。

Java多執行緒之執行緒安全

當多個執行緒訪問某乙個類 物件或方法時 這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的。public class mythread extends thread public static void main string args 結果如下 t1正在執行 4 t1正在執行...

JAVA多執行緒之 執行緒池

執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...

java多執行緒之執行緒的安全性 一

物件的狀態 物件的狀態是指儲存在狀態變數 例項或靜態域 中的資料。物件的狀態還可能包括其他依賴物件的域。例如,hashmap的狀態不僅儲存在物件本身,還儲存在map.entry物件中。多執行緒安全的概念 當多個執行緒訪問某個類時,不管執行時環境採用何種排程方式或者這些執行緒將如何交替執行,並且在主調...