1. java哪些集合類是線程安全的
在集抄合框架中,有些類是線程安全的襲,這些都是jdk1.1中的出現的。在jdk1.2之後,就出現許許多多非線程安全的類。 下面是這些線程安全的同步的類:
vector:就比arraylist多了個同步化機制(線程安全),因為效率較低,現在已經不太建議使用。在web應用中,特別是前台頁面,往往效率(頁面響應速度)是優先考慮的。
statck:堆棧類,先進後出
hashtable:就比hashmap多了個線程安全
enumeration:枚舉,相當於迭代器
除了這些之外,其他的都是非線程安全的類和介面。
線程安全的類其方法是同步的,每次只能一個訪問。是重量級對象,效率較低。
其他:
1. hashtable跟hashmap的區別
hashtable是線程安全的,即hashtable的方法都提供了同步機制;hashmap不是線程安全的,即不提供同步機制 ;hashtable不允許插入空值,hashmap允許!
2. java線程安全的集合還要加鎖嗎
線程安全是指要控制多個線程對某個資源的有序訪問或修改,而在這些線程之間沒有產生沖突。 在Java里,線程安全一般體現在兩個方面: 1、多個thread對同一個java實例的訪問(read和modify)不會相互干擾,它主要體現在關鍵字synchronized。
3. Java中怎樣創建線程安全的方法
很簡單的代碼如下:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static synchronized Singleton getInstance(){
if (instance == null) instance = new Singleton();
return instance;
}
}
4. Java線程安全,集合類練習
你是要長度為10的 隊列吧?
刪除在頭部,相當於出棧
那不就是先進先出么? --隊列?
然後給你搞一個多線程隊列就ok了 --------------
/**
* 容量為10的 隊列,多線程,線程要安全
* 容器為 集合,我選用linkedList,因為add 和 del 比較多,沒說select的情況
* 內部元素為int、
*
* 其實這東西 底層用數組最好。一下就可以控制lenght
* @author wangfulin
*/
public class T {
public static Q q;
private _Add add = new _Add();
private _Del del = new _Del();
public static void main(String[] args) {
int time = 200;// 運行次數
for (int i = 0; i < time; i++) {
q = Q.getInstance();
new T().getAdd().start();
new T().getDel().start();
q.getSize();
}
// 備注,最後如果剩餘數目不是0,那肯定是先執行的del()方法
//也就是說,一開始就列印 對應個數的 0 !
//覺得好,分給我啊!要不我傷心啊
}
_Add getAdd() {
return new _Add();
}
_Del getDel() {
return new _Del();
}
// 模擬調用對象
class _Add extends Thread {
public void run() {
Q.getInstance().add(1);
}
}
class _Del extends Thread {
public void run() {
Q.getInstance().del();
}
}
}
/**
* 多線程就要單例唄
* @author wangfulin
*/
class Q {
public static List list = new LinkedList();
public static Q q = new Q();
private Q() {}
public static Q getInstance() {
return q;
}
public void add(int i) {
synchronized (this) {
while(list.size() >= 10) {
del();
}
list.add(i);//這里保證了,最多不過10個
}
}
public void del() {
synchronized (this) {
if (list.size() == 0) {
return;
}
list.remove(list.size() - 1);
}
}
public void getSize() {
System.out.println(list.size());
}
}
5. 創建一個線程安全的set集合
可以利用Collections工具類的synchronizedSet方法修飾一個非同步的Set變成同步Set
Set<T>set=newHashSet<T>();//非同步,非線程安全的Set
Set<T>syncSet=Collections.synchronizedSet(set);//返回了一個線程安全的Set
6. Java集合中哪些類是線程安全的
線程安全類
在集合框架中,有些類是線程安全的,這些都是jdk1.1中的出現的。在jdk1.2之後,就出現許許多多非線程安全的類。 下面是這些線程安全的同步的類:
vector:就比arraylist多了個同步化機制(線程安全),因為效率較低,現在已經不太建議使用。在web應用中,特別是前台頁面,往往效率(頁面響應速度)是優先考慮的。
statck:堆棧類,先進後出
hashtable:就比hashmap多了個線程安全
enumeration:枚舉,相當於迭代器
除了這些之外,其他的都是非線程安全的類和介面。
線程安全的類其方法是同步的,每次只能一個訪問。是重量級對象,效率較低。
其他:
1. hashtable跟hashmap的區別
hashtable是線程安全的,即hashtable的方法都提供了同步機制;hashmap不是線程安全的,即不提供同步機制 ;hashtable不允許插入空值,hashmap允許!
2. 多線程並發修改一 個 集合 怎麼辦
用老的Vector/Hashtable類
StringBuffer是線程安全,而StringBuilder是線程不安全的。對於安全與不安全沒有深入的理解情況下,易造成這樣的錯覺,如果對於StringBuffer的操作均是線程安全的,然而,Java給你的保證的線程安全,是說它的方法是執行是排它的,而不是對這個對象本身的多次調用情況下,還是安全的。看看下邊的例子,在StringBufferTest中有一個數據成員contents它是用來擴展的,它的每一次append是線程安全的,但眾多次append的組合並不是線程安全的,這個輸出結果不是太可控的,但如果對於log和getContest方法加關鍵字synchronized,那麼結果就會變得非常條理,如果換成StringBuider甚至是append到一半,它也會讓位於其它在此基礎上操作的線程:
7. 有個關於java集合和線程安全的問題想請教下各位大神。。
Vector Hashtable是線程安全的,Arraylist和Hashmap是不安全的,盡量用線程安全的類,要不然就加鎖……
8. java集合類中哪些是線程安全的
一些歷史類的一般是線程安全的,例如:Vector,HashTable等
在jdk升級後,出現了替代一些集合的類,ArrayList,HashMap等,一般都是線程不安全的。
9. java線程安全的集合不能保證線程安全
理論上來說你的proct list應該是線程安全的,你把你的代碼貼出來看看唄,看看你是怎麼操作proct,又是如何出現數據不一致的