`
luhantu
  • 浏览: 201417 次
  • 性别: 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并发编程中,经常听到同步容器、并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同步的容器,比如Vector、Hashtable以及SynchronizedList等容器,如果有多个...

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

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

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

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

    Java并发编程原理与实战

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

    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:...

    并发编程实践,全面介绍基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具、Executor部分等

    详细介绍java并发编程...  同步容器   并发容器   阻塞队列 高级线程协作工具   信号量   闭锁   关卡 fork-join Executor部分   Executor基础 ThreadPoolExecutor的定制   线程的中断与任务的取消   其他

    Java并发编程:同步容器

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

    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并发容器CopyOnWriteArrayList实现原理及源码分析

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

    09、并发容器(Map、List、Set)实战及其原理

    2. **Map接口与并发容器**: - **HashMap**:非线程安全,不适用于多线程环境。如果要在并发环境中使用,需要配合`Collections.synchronizedMap()`来同步。 - **ConcurrentHashMap**:Java 5引入的并发容器,提供...

    Java高并发编程,构建并发编程知识体系,提升面试成功率

    本课程将结合大量图示及代码演示,带你掌握多线程并发编程(线程安全,线程调度,线程封闭,同步容器等)与高并发处理思路与手段(扩容,缓存,队列,拆分等),构建完整的并发与高并发知识体系,胜任实际开发中并发...

Global site tag (gtag.js) - Google Analytics