㈠ java线程安全的集合不能保证线程安全
仅能保证单个操作是线程安全的,但是迭代器则不再此列。
另外“组合操作”也是不能保证安全的。
如
if(proct.size()<10){
proct.add("obj");
}
不能保证proct.size()之后,proct.add("obj")之前,另外一个线程不add别的数据。
也不能保证
if (proct.contains("apple")) {
int index = proct.indexOf("apple");
proct.set(index, "banana");
}
确认有apple,就能查到apple的下标,即便是查到有效的下标,也不能保证set时,该下标仍然有效。
㈡ java的collection中哪些是线程安全的
java集合框架提供了多种synchronized集合, 比如Vector, HashTable, Collections的synchronizedXxx方法的返回值等.
synchronized集合是线程安全的, 但不是严格线程安全的. 根据JCIP第二章关于线程安全的定义--线程安全的类无需调用方进行额外的同步--synchronized集合是不满足该定义的. 如果我们将线程安全的定义放宽一些--单次调用对象的方法而无需调用方进行额外的同步, 这样synchronized集合就符合定义了.
㈢ Java中所说的线程安全是指什么
关于线程安全,是指当多个线程访问同一个变量时,该变量不会因为多线程访问产生意想不到的问题,为了避免多线程访问的不可预知的问题,对于程序中多线程能访问到的变量要加锁,即加synchronized,放在同步块中,或者对改变该变量值的方法加synchronized限制。当然jdk中自带的一些类本身就实现了该机制,本身就是线程安全的,比如StringBuffer,Vector等。
㈣ java线程安全的集合还要加锁吗
线程安全是指要控制多个线程对某个资源的有序访问或修改,而在这些线程之间没有产生冲突。 在Java里,线程安全一般体现在两个方面: 1、多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。
㈤ 什么是线程安全
线程安全是指在多线程环境下,多个线程同时访问某个类(对象或方法)时,对象的公共数据区能够保持正确的状态。在Java平台中,每个对象都内建了锁机制,包括两个关键概念:锁池(用于存储等待获取对象锁的线程)和等待池(存放执行了wait()方法的线程)。
Synchronized关键字(同步方法或代码块)通过锁定来实现资源的排它性,确保同一时间只有一个线程执行同步代码段,从而保证代码的原子性,虽然可能会牺牲部分性能。在选择性能与安全时,开发者需权衡并采取适当策略。
以案例Thread001为例,它有synchronized的run方法。当多个线程同时尝试访问时,会按顺序排队执行,一个线程获得锁后执行,其他线程则等待。锁池和等待池的区别在于,锁池是等待获取锁的线程集合,而等待池是执行完wait()方法的线程集合。
总结来说,线程安全是多线程编程中的重要概念,通过合适的同步机制确保数据一致性,同时需要根据具体场景平衡性能与安全性。