`
luhantu
  • 浏览: 204470 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

同步容器与并发容器

    博客分类:
  • Java
阅读更多

 同步容器:可以简单地理解为通过synchronized来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。比如Vector,Hashtable(早起JDK的一部分)及Collections.synchronizedXXX等方法返回的容器。

        可以通过查看Vector,Hashtable等这些同步容器的实现代码,可以看到这些容器实现线程安全的方式就是将它们的状态封装起来,并在需要同步的方法上加上关键字synchronized。但在某些情况下,我们需要实现额外的复合操作,比如获取最后一个元素或者删除最后一个元素:

public static Object getLast(Vector list) {  
    int lastIndex = list.size() - 1;  
    return list.get(lastIndex);  
}  
      
public static void deleteLast(Vector list) {  
    int lastIndex = list.size() - 1;  
    list.remove(lastIndex);  
}  

         虽然上面的方法看起来没有问题,Vector自身的方法也是同步的,但是在多线程环境中还是隐藏着问题。如果有两个线程A,B同时调用上面的两个方法,假设list的大小为10,这里计算得到的lastIndex为9,线程B首先执行了删除操作(多线程之间操作执行的不确定性导致),而后线程A调用了list.get方法,这时就会发生数组越界异常。导致问题的原因就是上面的复合操作不是原子操作,这里可以通过在方法内部使用list对象锁来实现原子操作。

 

         同步容器会导致多个线程中对容器方法调用的串行执行,降低并发性,因为它们都是以容器自身对象为锁,所以在需要支持并发的环境中,可以考虑使用并发容器来替代。

 

并发容器:并发容器是针对多个线程并发访问设计的,在jdk5.0引入了concurrent包,其中提供了很多并发容器,如ConcurrentHashMap,CopyOnWriteArrayList等。

并发容器使用了与同步容器完全不同的加锁策略来提供更高的并发性和伸缩性,例如在ConcurrentHashMap中采用了一种粒度更细的加锁机制,可以称为分段锁,在这种锁机制下,允许任意数量的读线程并发地访问map,并且执行读操作的线程和写操作的线程也可以并发的访问map,同时允许一定数量的写操作线程并发地修改map,所以它可以在并发环境下实现更高的吞吐量。

 

另外并发容器提供了一些在使用同步容器时需要自己实现的复合操作,包括putIfAbsent等,但是由于并发容器不能通过加锁来独占访问,所以我们无法通过加锁来实现复合操作了。

参考:http://aswang.iteye.com/blog/1744556

分享到:
评论

相关推荐

    Java从同步容器到并发容器的操作过程

    Java中的同步容器与并发容器是处理多线程环境下数据安全的重要工具。同步容器,如`Vector`和`HashTable`,通过在每个方法上添加`synchronized`关键字实现了线程安全,但这种方式存在性能瓶颈,因为每次操作都需要...

    Java同步容器和并发容器详解

    Java同步容器和并发容器详解 Java同步容器和并发容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发。下面我们来一起学习Java同步容器和并发容器的知识点。 一、同步...

    并发容器的原理,7大并发容器详解、及使用场景

    并发容器的出现解决了传统同步容器在性能上的不足,通过引入更先进的并发控制策略,如锁分段、CAS算法等,提升了程序的并发性和吞吐量。 首先,我们要理解什么是同步容器。Java 集合框架中的非线程安全容器,如 ...

    Java并发编程原理与实战

    同步容器与并发容器.mp4 并发容器CopyOnWriteArrayList原理与使用.mp4 并发容器ConcurrentLinkedQueue原理与使用.mp4 Java中的阻塞队列原理与使用.mp4 实战:简单实现消息队列.mp4 并发容器ConcurrentHashMap原理与...

    Java并发:同步容器&并发容器

    Java并发编程中,同步容器和并发容器是两种关键的线程安全数据结构。同步容器,如Vector和Hashtable,是通过内置的`synchronized`关键字来确保线程安全的。这意味着当多个线程尝试访问同步容器的方法时,它们会被...

    Java 并发编程原理与实战视频

    第46节同步容器与并发容器00:18:44分钟 | 第47节并发容器CopyOnWriteArrayList原理与使用00:15:52分钟 | 第48节并发容器ConcurrentLinkedQueue原理与使用00:31:03分钟 | 第49节Java中的阻塞队列原理与使用00:26:...

    龙果java并发编程完整视频

    第46节同步容器与并发容器00:18:44分钟 | 第47节并发容器CopyOnWriteArrayList原理与使用00:15:52分钟 | 第48节并发容器ConcurrentLinkedQueue原理与使用00:31:03分钟 | 第49节Java中的阻塞队列原理与使用00:26:...

    java并发编程

    第46节同步容器与并发容器00:18:44分钟 | 第47节并发容器CopyOnWriteArrayList原理与使用00:15:52分钟 | 第48节并发容器ConcurrentLinkedQueue原理与使用00:31:03分钟 | 第49节Java中的阻塞队列原理与使用00:26:...

    龙果 java并发编程原理实战

    第46节同步容器与并发容器00:18:44分钟 | 第47节并发容器CopyOnWriteArrayList原理与使用00:15:52分钟 | 第48节并发容器ConcurrentLinkedQueue原理与使用00:31:03分钟 | 第49节Java中的阻塞队列原理与使用00:26:...

    Java并发编程:同步容器

    为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。我们来讨论下同步容器。  一.为什么会出现同步容器?  在...

    TBB并发容器 学习笔记

    相比于传统的STL容器,TBB并发容器的优势在于它们在设计时考虑了多线程环境,不需要程序员手动添加锁或其他同步机制。这减少了潜在的死锁和竞态条件的风险,提高了代码的可读性和可维护性。然而,值得注意的是,虽然...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载.zip

    7-1 同步容器与并发容器.mp4 7-2 同步容器.mp4 7-3 并发容器.mp4 7-4 LinkedBlockingQueue的使用及其源码探秘.mp4 8-1 CountDownLatch的使用及其源码探秘.mp4 8-2 CyclicBarrier的使用及其源码探秘.mp4 8-3 ...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载4.zip

    7-1 同步容器与并发容器.mp4 7-2 同步容器.mp4 7-3 并发容器.mp4 7-4 LinkedBlockingQueue的使用及其源码探秘.mp4 8-1 CountDownLatch的使用及其源码探秘.mp4 8-2 CyclicBarrier的使用及其源码探秘.mp4 8-3 ...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载2.zip

    7-1 同步容器与并发容器.mp4 7-2 同步容器.mp4 7-3 并发容器.mp4 7-4 LinkedBlockingQueue的使用及其源码探秘.mp4 8-1 CountDownLatch的使用及其源码探秘.mp4 8-2 CyclicBarrier的使用及其源码探秘.mp4 8-3 ...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载3.zip

    7-1 同步容器与并发容器.mp4 7-2 同步容器.mp4 7-3 并发容器.mp4 7-4 LinkedBlockingQueue的使用及其源码探秘.mp4 8-1 CountDownLatch的使用及其源码探秘.mp4 8-2 CyclicBarrier的使用及其源码探秘.mp4 8-3 ...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载1.zip

    7-1 同步容器与并发容器.mp4 7-2 同步容器.mp4 7-3 并发容器.mp4 7-4 LinkedBlockingQueue的使用及其源码探秘.mp4 8-1 CountDownLatch的使用及其源码探秘.mp4 8-2 CyclicBarrier的使用及其源码探秘.mp4 8-3 ...

    Java服务器端开发面试.doc

    14. **同步容器与并发容器**:`Vector`和`HashTable`是同步容器,线程安全但性能较差;`ArrayList`、`HashMap`等是并发容器,提供线程安全的替代方案。 15. **数据结构**:线性列表、二叉树、平衡树(如AVL和B+树)...

    java并发容器CopyOnWriteArrayList实现原理及源码分析

    Java并发容器CopyOnWriteArrayList实现原理及源码分析 Java并发容器CopyOnWriteArrayList是Java并发包中提供的一个并发容器,实现了线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现。...

Global site tag (gtag.js) - Google Analytics