线程安全、非线程安全
2017-02-16 11:08
253 查看
线程安全:当多个线程类并发操作某类的某个方法,(在该方法内部)来修改这个类的某个成员变量的值,
不会出错,则我们就说,该的这个方法是线程安全的。
线程不安全(非线程安全):当多个线程类并发操作某类的某个方法,(在该方法内部)来修改这个类的某个成员
变量的值,很容易就会发生错误,故我们就说,这个方法是线程不安全的。如果要把这个方法变成线
程安全的,则用 synchronized关键字来修饰该方法即可。
总结:线程安全对共享变量互斥访问
非线程安全不是
所以要是线程间数据相关则而又不是线程安全的话,很危险的
举例说明:ArrayList和Vector、[b] HashMap和HashTable、StringBuilder和StringBuffer[/b]
ArrayList是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。
ArrayList和Vector:
1、如果List不会被多线程并发访问,使用ArrayList就没有问题,而且速度效率要高些;
2、如果有多线程并发访问List,可以使用Vector,也可以使用ArrayList,
并且自己对可能出现并发冲突的地方自行做synchronized处理。
简单的来讲,在多线程情况下 vector.add(e),这样写就好了,如果你用ArrayList.add(e),那么你就得这样
synchronized(ArrayList)
{
ArrayList.add(e)
}
vector:内部已经做了这样的处理了
不会出错,则我们就说,该的这个方法是线程安全的。
线程不安全(非线程安全):当多个线程类并发操作某类的某个方法,(在该方法内部)来修改这个类的某个成员
变量的值,很容易就会发生错误,故我们就说,这个方法是线程不安全的。如果要把这个方法变成线
程安全的,则用 synchronized关键字来修饰该方法即可。
总结:线程安全对共享变量互斥访问
非线程安全不是
所以要是线程间数据相关则而又不是线程安全的话,很危险的
举例说明:ArrayList和Vector、[b] HashMap和HashTable、StringBuilder和StringBuffer[/b]
ArrayList是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。
ArrayList和Vector:
1、如果List不会被多线程并发访问,使用ArrayList就没有问题,而且速度效率要高些;
2、如果有多线程并发访问List,可以使用Vector,也可以使用ArrayList,
并且自己对可能出现并发冲突的地方自行做synchronized处理。
简单的来讲,在多线程情况下 vector.add(e),这样写就好了,如果你用ArrayList.add(e),那么你就得这样
synchronized(ArrayList)
{
ArrayList.add(e)
}
vector:内部已经做了这样的处理了
相关文章推荐
- 微信开发定时获取token,保证线程安全,高可用
- Spring MVC Controller的线程安全
- Spring框架中的单例Beans是线程安全的么
- 高并发下线程安全的单例模式(最全最经典)
- 单例模式之线程安全
- java 线程和线程安全初识
- HTTP Client MultiThreadedHttpConnectionManager线程安全连接管理类源码解析
- ThreadLocal解决SimpleDateFormat线程安全问题
- Java多线程(二) —— 线程安全、线程同步、线程间通信(含面试题集)
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
- C# 多线程编程第二步——线程同步与线程安全
- 如何线程安全的使用HashMap
- SpringMVC 在controller层中注入request(不会产生线程安全问题)
- 【线程安全】—— 单例类双重检查加锁(double-checked locking)
- 多线程之 线程安全与非线程安全
- 并发编程(二):非线程安全集合类
- 懒汉式的线程安全
- JAVA内存模型和线程安全
- 线程安全的单例模式
- 如何线程安全地遍历List:Vector、CopyOnWriteArrayList