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,又是如何出现数据不一致的