【Java】线程安全学习

来源:互联网 发布:js 获取get url参数 编辑:程序博客网 时间:2024/05/22 11:24

一项任务在执行的过程中会不断的切换状态,对象的属性有可能会被更改或者变成脏数据。为了让程序高效运行,并且保证并发的正确性,依次来分析线程的安全和引入锁机制。 什么是线程安全:从网上找了一段话,多个线程访问这个对象,不用考虑这些线程在多个任务情况下的调度和交替运行,调用这个对象能得到正确的结果。

按照线程的安全程度划分可以将java语言安全程度5个等级:

不可变:final修饰,String修饰,Integer修饰,Long Double修饰,BigInteger修饰 BigDecimal(涉及跟金钱相关的属性要用这个,比较精确,对应数据库中的decimal类型)修饰。

绝对线程安全:不管运行时环境如何,都能得到正确结果。这个比较严格。不变类都是绝对线程安全的。

相对线程安全:这个就是我们经常说的线程安全。调用者都不需要考虑线程同步,大多数情况下,都能够正常运行。jdk里面大多数类都是相对安全的。最常见的例子是java里面Vector类。

线程兼容:在多线程环境下,调用者需要考虑同步问题。如果调用者通过额外的同步机制,可以保证线程的安全性。比如arrayList HashMap 都可以通过工具类来达到线程安全。

线程对立:也就是不安全情况。

线程安全实现方法:

互斥同步:Lock synchronized

非阻塞同步:类似AtomicInteger的原子自增算法

无同步方案:共享线程参数方案,或者类似FutureTask那种模式

原创粉丝点击