我有一段关于ArrayLisy和Vector线程安全的代码,如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class SynchronizedCollectionsTest {
static List<Integer> list = new ArrayList<Integer>(20);
static List<Integer> vector = new Vector<Integer>();
public static void main(String[] args) {
Thread thread1 = new Thread() {
public void run() {
for (int i = 0; i < 10; i++) {
list.add(list.size(), i);
vector.add(vector.size(), i);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
System.out.println(e);
}
}
}
};
Thread thread2 = new Thread() {
public void run() {
for (int i = 0; i < 10; i++) {
list.add(list.size(), i);
vector.add(vector.size(), i);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
System.out.println(e);
}
}
}
};
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
System.out.println(e);
}
System.out.println(list);
System.out.println(vector);
}
}
现在想请教各位,为什么list中会有null输出?想知道list是如何产生出null的?
分享到:
相关推荐
与 ArrayList 不同,Vector 是线程安全的,但在多线程环境下,它的性能通常低于非同步的 ArrayList,因为每次操作都需要进行同步锁定。 **Set 接口** Set 接口不保证元素的顺序,且不允许有重复元素。常见的 Set ...
Collection接口有List和Set两个子接口,ArrayList和LinkedList是List接口的实现,Vector是ArrayList的线程安全版本。Set接口包括HashSet和TreeSet等。Map接口则有HashMap、TreeMap等实现。选择集合实现类时,需要...
4. **线程安全问题**:多线程环境下,共享资源的访问必须加以控制,防止数据竞争和死锁现象的发生。常见的解决方案包括使用`synchronized`关键字对关键代码段加锁,或采用`ReentrantLock`等更高级的锁机制。 #### ...
Vector是线程安全的,性能略逊于ArrayList。 - LinkedList使用链表结构,插入和删除速度快,但按序号访问慢,因为它需要从头或尾部开始遍历。 7. EJB(Enterprise JavaBeans)技术: - EJB是Java企业级应用的核心...
而**Vector** 是ArrayList的线程安全版本,但性能较差。**Stack** 是Vector的一个子类,实现了后进先出(LIFO)的数据结构。 5. **Enumeration** 和 **Iterator** 是遍历集合的两种方式。Enumeration是老式的迭代...
`Vector`与现代Java中的`ArrayList`类似,但其操作是线程安全的,这意味着在多线程环境下,无需额外的同步措施即可安全地使用。然而,由于其同步机制带来的性能开销,`Vector`在单线程环境中通常被效率更高的`...
- **并发集合**:详述了JUC(Java Util Concurrency)库,包括ArrayList、LinkedList、HashMap等线程安全的改进版本,以及CopyOnWriteArrayList、ConcurrentHashMap等高效并发集合。 - **原子类**:如...
Vector与ArrayList类似,但它是线程安全的,适合多线程环境。 在描述中提到的学生注册、登录和退出登录功能,我们可以这样实现: 1. **学生注册**:在注册过程中,我们可能需要创建一个新的学生对象(如Student类...
对于Java新手,理解数组和集合框架(如`ArrayList`)之间的区别很重要。数组提供固定大小和直接访问,而集合框架类(如`ArrayList`、`LinkedList`等)提供更多的功能,如动态增长、迭代器和丰富的API。 在Java中,...
3. **集合框架**:详述了Java集合体系,包括ArrayList、LinkedList、Vector、HashMap、HashSet、TreeMap等,并讨论了泛型在集合中的应用。 4. **多线程**:阐述了Java中的线程机制,包括线程的创建、同步、并发工具...
- **4.3 Vector, ArrayList, LinkedList的区别**:比较三种列表集合的特点和适用场景。 - **4.4 HashTable, HashMap, ConcurrentHashMap的区别**:探讨这三种散列表集合的设计理念、性能特点以及应用场景。 - **...
在“Practice-Uploads:我的日常编码实践”这个项目中,我们可以看到一个新手程序员通过每日上传代码进行自我学习和提升的过程。这个存储库包含了不同编程语言的实践代码,包括Python、Java、C++以及Jupyter Notebook...
整体结构和一些主要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域中具体应用产生的具体不同 的变化需求,而这些变化东西就是 J2EE 程序员所要做的。 由此可见,设计模式和 J2EE 在思想...