Java线程安全和非线程安全
2024-09-21 09:44:40
ArrayList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的
什么是线程安全?线程安全和非线程安全有什么区别?分别在什么情况下使用?
非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
线程安全必须要使用很多synchronized关键字(可以防止多个线程同时访问对象中的方法或者某资源)来同步控制,所以必然会导致性能的降低。
所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。
非线程安全!=不安全
有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。
非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。比如最上面那个模拟,就是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象。
如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。
线程安全的实现
线程安全是通过线程同步控制来实现的,也就是synchronized关键字。
这里实现了一个线程安全的计数器Counter
public synchronized void addCount(){count++ ;}}
最新文章
- tab+tab
- css外部样式导入@import()
- mysql: see all open connections to a given database?
- char *p = ";abcdefg";; p[0] = p[1]出错
- (spring-第14回【IoC基础篇】)国际化信息
- Python 异常相关参考
- PHP提取身份证号码中的生日并验证是否成年的函数
- nodejs安装express遇到的坑
- sqlplus handbook
- 微信超时5s,调用客服接口异步回复消息(PHP)
- mybatis generator Date类型时间丢失
- python的range()函数
- 【TensorFlow 官网 可以直接访问】让中国开发者更容易地使用TensorFlow打造人工智能应用
- 为什么不要使用 async void?
- Express全系列教程之(九):将session上传至mysql数据库
- Centos6.5部署Rsyslog+cron+rsync备份服务器
- ssh 多次登录禁用账号
- 实战ELK(7)ElasticSearch常用的基本查询语句
- kbmMW 5.06.20试用笔记
- hdu2084 数塔 DP
热门文章
- 发现一个nginx LUA开发Web App的框架
- A protocol error occurred. Change of username or service not allowed: (root,ssh-connection) ->; (zoujiaqing,ssh-connection)
- plsql 环境搭建(sqlplus环境设置)
- C++ STL标准模板库(vector)
- C++ Scoket的升级版(多态的运用)
- google cloud本地环境搭建
- ubuntu 安装 avahi服务
- Sort List[leetcode] 由归并排序的递归和循环,到本题的两种解法
- JS循环语句的理解
- GS与NGP通信(不断跟新)