java什麼是線程安全
❶ java中如何保證線程安全性
線程安全主要在體現在這三個方面:
1.原子性:提供互斥訪問,同一時刻只能有一個線程對數據進行操作,(atomic,synchronized);
2.可見性:一個線程對主內存的修改可以及時地被其他線程看到,(synchronized,volatile);
3.有序性:一個線程觀察其他線程中的指令執行順序,由於指令重排序,該觀察結果一般雜亂無序,(happens-before原則)。
所以想保證線性安全的話只要從這三個方面入手就可以了。
❷ java中哪些線程安全
JAVA中線程安全的map有:Hashtable、synchronizedMap、ConcurrentHashMap。
java中map中線程安全怎麼實現:
1、同步的map就是Hashtable, concurrenthashmap。
2、你看到的Hashtable就是直接在hashmap上加了個鎖,concurrenthashmap就是分成多個分段鎖。
java代碼中線程安全級別:
1、絕對線程安全。
在任何環境下,調用者都不需要考慮額外的同步措施,都能夠保證程序的正確性。這個定義要求很嚴格,java裡面滿足這個要求的類比較少,對於實現jsr133規范(java內存模型)的jdk(一般指jdk5.0之上),一般的不變類都是滿足絕地線程安全的。比如 String,Integer類。一般情況下,定義了如果一個類裡面所有欄位都是final類型的,一般都認為這個類是不變的。不變類都是絕對線程安全的。
2、相對線程安全
在一般情況下,調用者都不需要考慮線程同步,大多數情況下,都能夠正常運行。jdk裡面大多數類都是相對安全的。最常見的例子是java裡面Vector類。
❸ java里線程安全是什麼意思有什麼作用
比如說,兩個線程操作同一個ArrayList變數,那麼一個線程這一時刻讀的數據可能在下一刻要改變。
一般在類似於下面的情景下考慮線程安全的問題:
ArrayList procts=new ArrayList ();
procts用來存放生產出來的產品。
現在假設:有3個消費者線程,2個生產者線程。
每個生產者線程生產出一個產品,執行
procts.add(new Proct());
每個消費者線程消費一個產品執行
if(procts.size()>=1){ procts.remove(0);}
如果procts里現在只有一個產品可以消費,但是有2個消費者線程請求消費,那麼就有可能出現一個產品被同時消費的問題,而這是和實際不符的。
但是不同的線程訪問Vector的時候不會發生這種錯誤,因為java會有相應的機制是同一時刻只有一個線程對這個變數操作。
這就是所謂的:
Vector:是線程安全的
ArrayList:不是線程安全的