`
shadabing
  • 浏览: 23843 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

容器类的线程安全

阅读更多
1)Vector与ArrayList
    所谓线程安全,单线程和多线程运行这段代码结果是一样的(如果这段代码一般是一个函数,在其它语言中称为可重入函数),在JAVA中依靠同步来保障线程安全。阅读jdk原码我们可以知道Vector是线程安全的,而ArrayList是线程不安全的。如果一段程序在单线程中我们当然是使用那些线程不安全的函数,这样不需要加锁和解锁的操作,大大提高了程序运行的效率。
     一般我们程序运行在多线程的环境中,使用这些线程不安全的函数需要加锁来保证线程的安全性。如在ArrayList添加一个对象,要在多线程中保证每次操作安全,需要同步。
    synchronized(arraylist) {arraylist.add(new Object());},
    事实上,JDK提供了java.util.Collections的synchronizedXXX()等方法来传回一个同步化的容器对象,和上面代码等价
    List list = Collections.synchronizedList(new ArrayList());
   不过我们需要注意的是:即使是线程安全类,当在一个函数中加入对集合的某些条件判断,再使用这些这些线程安全函数, 那么操作的线程之间不一定是安全的。如下:
分享到:
评论

相关推荐

    java 多线程设计模式 进程详解

    非线程安全的类 总结 第九章 多处理器机器上的并行化 单线程程序并行化 内层循环线程化 循环输出 多处理器扩展 总结 第十章 线程组 线程组概念 创建线程组 线程组方法 操作线程组 线程组、线程和安全 总结

    Java容器类List、ArrayList、Vector及map、HashTable应用

    List、ArrayList、Vector及map、HashTable、HashMap的区别与用法 使用容器排序 Vector由于使用了synchronized方法(线程安全)

    smart_container:线程安全的语义定义的IoCDI容器

    线程安全的语义定义的IoC / DI容器。 安装 gem 'smart_container' bundle install # --- or --- gem install smart_container require 'smart_core/container' 餐桌 路线图 功能性 容器类的创建 class ...

    java集合类原理面试题

    Java中有哪些容器(集合类)? 线程安全和线程不安全的分别有哪些? Map接口有哪些实现类? 描述一下Map put的过程 如何得到一个线程安全的Map? HashMap有什么特点? ConcurrentHashMap是怎么分段分组的? ...

    C++内存池模版类与多种容器封装

    1,封装的C++内存池模版类,可以使用malloc方式和new方式分配内存,可在多线程情况下安全工作 2,封装了多个容器类以适应多线程下的操作 3,本封装可在IOCP高性能通信服务器上高效、稳定的工作

    14个Java并发容器,你用过几个?.docx

    在并发场景下,常会用到ConcurrentHashMap、ArrayBlockingQueue等线程安全的容器类,虽然牺牲了一些效率,但却得到了安全。 上面提到的线程安全容器都在java.util.concurrent包下,这个包下并发容器不少,今天全部翻...

    JavaSE 笔试 精华

    每个修改容器中数据的操作都是同步的(synchronized),因此保证了线程安全。 3. String、StringBuffer,StringBuilder之间区别。 String是长度不可变的,StringBuffer和StringBuilder长度都是可以变化的。 ...

    Java并发编程part2

    4.4 向已有的线程安全类添加功能 4.5 同步策略的文档化 第5章 构建块 5.1 同步容器 5.2 发容器 5.3 阻塞队列和生产者一消费者模式 5.4 阻塞和可中断的方法 5.5 synchronizer 5.6 为计算结果建立高效、可伸缩的高速...

    Java并发编程实践part1

    4.4 向已有的线程安全类添加功能 4.5 同步策略的文档化 第5章 构建块 5.1 同步容器 5.2 发容器 5.3 阻塞队列和生产者一消费者模式 5.4 阻塞和可中断的方法 5.5 synchronizer 5.6 为计算结果建立高效、可伸缩的高速...

    Java并发编程实战

    第2章 线程安全性 2.1 什么是线程安全性 2.2 原子性 2.2.1 竞态条件 2.2.2 示例:延迟初始化中的竞态条件 2.2.3 复合操作 2.3 加锁机制 2.3.1 内置锁 2.3.2 重入 2.4 用锁来保护状态 2.5 活跃性与性能 第...

    Java 并发编程实战

    2.1 什么是线程安全性 2.2 原子性 2.2.1 竞态条件 2.2.2 示例:延迟初始化中的竞态条件 2.2.3 复合操作 2.3 加锁机制 2.3.1 内置锁 2.3.2 重入 2.4 用锁来保护状态 2.5 活跃性与性能 第3章 对象的共享 ...

    Java并发编程(学习笔记).xmind

    同步容器类 分类 Vector Hashtable 实现线程安全的方式 将状态封装起来,对每个公有方法都进行同步 存在的问题 复合操作 修正方式 客户端加锁 迭代器 并发...

    JAVA并发编程实践_中文版(1-16章全)_1/4

    4.4 向已有的线程安全类添加功能 4.5 同步策略的文档化 第5章 构建块 5.1 同步容器 5.2 发容器 5.3 阻塞队列和生产者一消费者模式 5.4 阻塞和可中断的方法 5.5 synchronizer 5.6 为计算结果建立高效、可伸缩的高速...

    Java 并发学习笔记:进程和线程,并发理论,并发关键字,Lock 体系,原子操作类,发容器 & 并发工具,线程池,并发实践

    进程和线程, 并发理论, 并发关键字, Lock 体系, 原子操作类, 发容器 & 并发工具, 线程池, 并发实践 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在...

    多线程下的并发包:这些面试必问的,你都知道吗?

    在JDK的并发包里提供了几个非常有用的并发容器和并发工具类,供我们在多线程开发中进行使用。 并发包的来历: 在实际开发中如果不需要考虑线程安全问题,大家不需要做线程安全,因为如果做了反而性能不好! 但是开发...

    Qt C++11 生产者消费者模式类

    使用Qt 和 C++11 的std::mutex 和 std::condition_variable 实现一个演示生产者消费者模式的Qt工程。

    Dlib通用库

    Dlib是一个使用现代C++技术编写的跨平台的通用库,遵守Boost Software licence. 主要特点如下: 1.完善的文档:每个类每个...12.一般工具:XML解析、内存管理、类型安全的big/little endian转换、序列化支持和容器类

    dlib-18.2.zip

    Dlib是一个使用现代C++技术编写的跨平台的通用库,遵守Boost Software licence. 主要特点如下: 1.完善的文档:每个类每个...12.一般工具:XML解析、内存管理、类型安全的big/little endian转换、序列化支持和容器类

Global site tag (gtag.js) - Google Analytics