线程安全与非线程安全的区别

线程安全:是多线程访问时,采用加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

非线程安全:是多线程访问时,不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。所得数据可能不一致

区别:非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题

使用情况:如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList

线程安全是通过线程同步控制来实现的,也就是synchronized关键字;非线程安全通过异步实现

synchronized可以用在方法上也可以使用在代码块上,其中方法实例方法和静态方法,被锁的对象类的实例对象类对象。而使用在代码块上分别是实例对象class对象任意实例对象Object被锁的对象类的实例对象类对象实例对象Object注意:如果锁的是类对象的话,尽管new多个实例对象,但他们仍然是属于同一个类依然会被锁住,即线程之间保证同步关系。

ArrayList是非线程安全的,Vector是线程安全的


HashMap是非线程安全的,采用异步处理,性能更高,在JDK1.2之后推出,使用的更多;

HashTable是线程安全的,采用同步处理,性能较低,在JDK1.0是推出


StringBuilder是非线程安全的,StringBuffer是线程安全的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值