package com.bjsxt.base.coll012; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; /** * 多线程使用Vector或者HashTable的示例(简单线程同步问题) * @author alienware * 二、线程安全(Thread-safe)的集合对象: Vector 线程安全: HashTable 线程安全: StringBuffer 线程安全: 三、非线程安全的集合对象: ArrayList : LinkedList: HashMap: HashSet: TreeMap: TreeSet: StringBulider: 3 非线程安全的集合 可以通过 Collections.synchronizedXXX(?) 方法来使不是线程安全的变成线程安全,但是源码只是简单的使用 synchronize 进行同步,影响效率,所以JDK1.5之后出现并发类容器。; */ /* * 如果不是线程安全的结合出现复合型的操作会报错: * Exception in thread "线程10" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) at java.util.ArrayList$Itr.next(ArrayList.java:831) at com.bjsxt.base.coll012.Tickets$1.run(Tickets.java:51) 修改成线程安全的集合就没这个问题 * * */ public class Tickets { public static void main(String[] args) { //初始化火车票池并添加火车票:避免线程同步可采用Vector替代ArrayList HashTable替代HashMap final Vector<String> tickets = new Vector<String>(); //同步 Map<String, String> map = Collections.synchronizedMap(new HashMap<String, String>()); for(int i = 1; i<= 1000; i++){ tickets.add("火车票"+i); } // for (Iterator iterator = tickets.iterator(); iterator.hasNext();) { // String string = (String) iterator.next(); // tickets.remove(20); // } for(int i = 1; i <=10; i ++){ new Thread("线程"+i){ public void run(){ for (Iterator iterator = tickets.iterator(); iterator.hasNext();) { String string = (String) iterator.next(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //tickets.remove(20); } } }.start(); new Thread("线程"+i){ public void run(){ while(true){ if(tickets.isEmpty()) break; try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "---" + tickets.add("火车票")); } } }.start(); } } }
相关推荐
Java中的同步容器与并发容器是处理多线程环境下数据安全的重要工具。同步容器,如`Vector`和`HashTable`,通过在每个方法上添加`synchronized`关键字实现了线程安全,但这种方式存在性能瓶颈,因为每次操作都需要...
Java同步容器和并发容器详解 Java同步容器和并发容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发。下面我们来一起学习Java同步容器和并发容器的知识点。 一、同步...
并发容器的出现解决了传统同步容器在性能上的不足,通过引入更先进的并发控制策略,如锁分段、CAS算法等,提升了程序的并发性和吞吐量。 首先,我们要理解什么是同步容器。Java 集合框架中的非线程安全容器,如 ...
Java并发编程中,同步容器和并发容器是两种关键的线程安全数据结构。同步容器,如Vector和Hashtable,是通过内置的`synchronized`关键字来确保线程安全的。这意味着当多个线程尝试访问同步容器的方法时,它们会被...
相比于传统的STL容器,TBB并发容器的优势在于它们在设计时考虑了多线程环境,不需要程序员手动添加锁或其他同步机制。这减少了潜在的死锁和竞态条件的风险,提高了代码的可读性和可维护性。然而,值得注意的是,虽然...
为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。我们来讨论下同步容器。 一.为什么会出现同步容器? 在...
Java并发容器CopyOnWriteArrayList实现原理及源码分析 Java并发容器...CopyOnWriteArrayList容器是一种高性能的并发容器,特别适用于读多写少的并发场景,但是需要注意其内存占用问题和实时性问题。
【Java并发编程-并发容器1】 在Java的并发编程中,容器的线程安全是至关重要的。HashMap在多线程环境下可能导致CPU利用率极高,因为它不是线程安全的。HashTable虽然提供了线程安全,但其同步机制导致并发性能较低。...
在`java.util.concurrent`包中,有四种主要的并发容器类型:队列(BlockingQueue)、Map(ConcurrentMap)、Set(ConcurrentSkipListSet和CopyOnWriteArraySet)以及List(CopyOnWriteArrayList)。这些容器的设计...
1. **并发容器概述**: 在并发编程中,数据共享和线程安全是核心问题。Java提供了一些线程安全的容器,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ConcurrentSkipListSet`,它们为开发者提供了高效且安全的...
- **并发容器**:如ArrayList、HashMap的并发版本(CopyOnWriteArrayList、ConcurrentHashMap),设计为线程安全,但效率更高。 - **阻塞队列**:如ArrayBlockingQueue、LinkedBlockingQueue,提供生产者-消费者...
### 并发容器和线程池 #### 一、并发容器 ##### 1.1 概述 在Java中,为了提高程序的并发处理能力,Java标准库提供了多个线程安全的并发容器,它们主要位于`java.util.concurrent`包中。这些容器能够有效地管理...
多线程并发访问,同步控制 线程间通信,等待/通知机制 锁锁机制,API详解 Fork/Join 框架机制详解 Executor线程池框架简介 面向对象 泛型机制与反射原理 Proxy动态代理机制详解 从整体上观察对象 网络开发 Servlet...
本课程将结合大量图示及代码演示,带你掌握多线程并发编程(线程安全,线程调度,线程封闭,同步容器等)与高并发处理思路与手段(扩容,缓存,队列,拆分等),构建完整的并发与高并发知识体系,胜任实际开发中并发...
Java平台提供了丰富的并发工具和API,如线程、同步机制、并发容器、并发工具类等,这些在《Java 并发编程实战》中都有详尽的阐述。 1. **线程与进程**:书中首先会介绍操作系统中的线程和进程概念,以及它们在Java...
java并发编程总结,包括多线程安全机制分析总结,Unsafe源码分析总结,并发工具类总结,ThreadLocal原理和使用,Fork/Join框架使用总结,同步容器和并发容器源码分析
在Java并发编程中,还涉及到多种并发工具类,例如同步容器类和并发容器类。同步容器类使用同步锁来保证线程安全,但可能会影响性能。并发容器类ConcurrentHashMap和CopyOnWriteArrayList等,采用细粒度的锁和弱一致...
1. **并发容器**:Java提供了一系列的并发容器,如`ConcurrentHashMap`,它在并发环境下提供了高效且线程安全的映射操作。与`Hashtable`不同,`ConcurrentHashMap`不是通过全局锁来实现同步,而是采用分段锁策略,...
总的来说,这份“java并发编程内部分享PPT”涵盖了Java并发编程的多个重要方面,包括线程创建与管理、同步机制、并发容器、线程池、并发问题以及异步计算。通过深入学习和实践这些知识点,开发者可以更好地应对多...
总之,基于C++的线程安全容器是并发编程中的一个重要主题,它涉及到多线程编程的基础知识,如同步机制和并发控制。通过实践这样的项目,学生不仅可以提升自己的编程能力,还能对并发编程有更深入的理解。