ArrayList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的

什么是线程安全?线程安全和非线程安全有什么区别?分别在什么情况下使用?

非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
线程安全必须要使用很多synchronized关键字(可以防止多个线程同时访问对象中的方法或者某资源)来同步控制,所以必然会导致性能的降低。
所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。

非线程安全!=不安全
有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。
非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。比如最上面那个模拟,就是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象。
如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。

线程安全的实现
线程安全是通过线程同步控制来实现的,也就是synchronized关键字。
这里实现了一个线程安全的计数器Counter

public synchronized void addCount(){count++ ;}}

最新文章

  1. tab+tab
  2. css外部样式导入@import()
  3. mysql: see all open connections to a given database?
  4. char *p = "abcdefg"; p[0] = p[1]出错
  5. (spring-第14回【IoC基础篇】)国际化信息
  6. Python 异常相关参考
  7. PHP提取身份证号码中的生日并验证是否成年的函数
  8. nodejs安装express遇到的坑
  9. sqlplus handbook
  10. 微信超时5s,调用客服接口异步回复消息(PHP)
  11. mybatis generator Date类型时间丢失
  12. python的range()函数
  13. 【TensorFlow 官网 可以直接访问】让中国开发者更容易地使用TensorFlow打造人工智能应用
  14. 为什么不要使用 async void?
  15. Express全系列教程之(九):将session上传至mysql数据库
  16. Centos6.5部署Rsyslog+cron+rsync备份服务器
  17. ssh 多次登录禁用账号
  18. 实战ELK(7)ElasticSearch常用的基本查询语句
  19. kbmMW 5.06.20试用笔记
  20. hdu2084 数塔 DP

热门文章

  1. 发现一个nginx LUA开发Web App的框架
  2. A protocol error occurred. Change of username or service not allowed: (root,ssh-connection) -> (zoujiaqing,ssh-connection)
  3. plsql 环境搭建(sqlplus环境设置)
  4. C++ STL标准模板库(vector)
  5. C++ Scoket的升级版(多态的运用)
  6. google cloud本地环境搭建
  7. ubuntu 安装 avahi服务
  8. Sort List[leetcode] 由归并排序的递归和循环,到本题的两种解法
  9. JS循环语句的理解
  10. GS与NGP通信(不断跟新)