美文网首页
复合操作---线程安全性

复合操作---线程安全性

作者: 起风了dzj | 来源:发表于2018-07-06 18:36 被阅读0次

假定有两个操作A和B,如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和B对彼此来说是原子的。原子操作是指,对于访问同一个状态的所有操作(包括该操作本身)来说,这个操作是一个以原子方式执行的操作。

@ThreadSafe

public class CountingFactorizer implements Servlet{

private final AtomicLong count =new AtomicLong(0);

public long getCount(){return count.get();}

public void service(ServletRequest req,ServletResponse resp){

BigInteger i=extractFromRequest(req);

BigInteger[] factors=factor(i);

count.incrementAndGet();//以原子方式将当前值加 1。

encodeIntoResponse(resp,factors);

}

}

在java.util.concurrent.atomic 包中包含了一些原子变量类,用于实现在数值和对象引用上的原子状态转换。通过用AtomicLong来替换Long类型的计算器,能够确保所有对计数器状态的访问操作都是原子的。

AtomicLong是作用是对长整形进行原子操作,显而易见,在java1.8中新加入了一个新的原子类LongAdder,该类也可以保证Long类型操作的原子性,相对于AtomicLong,LongAdder有着更高的性能和更好的表现,可以完全替代AtomicLong的来进行原子操作。

在实际情况中,应尽可能使用现有的线程安全对象(例如ActomicLong)来管理类的状态。与非线程安全的对象对比,判断线程安全对象的可能状态及其状态转换情况要更为容易,从而也更容易维护和验证线程安全性。

相关文章

  • 复合操作---线程安全性

    假定有两个操作A和B,如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和...

  • Java多线程

    在java中,多线程一直是代表着高级 线程安全性 线程安全需要考虑操作的自己状态的原子性,竟态条件,复合操作 保证...

  • 3对象共享

    同步的作用 确保复合操作的原子性(复合操线程间作互斥) 内存可见性 volatile 作用:将当前线程对volat...

  • 线程安全问题

    线程产生安全性问题的Reason:1 多个线程操作共享的数据。2 操作共享数据的代码是多条的。当一个线程正在执行共...

  • 06.并发编程之同步类容器和并发类容器

    一、同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作。复合操作如:迭代(反复访问元素...

  • 学习笔记

    UI操作为什么在主线程? UIKit线程安全性:UIKit并不是一个线程安全的类,UI操作涉及到渲染访问各种Vie...

  • 并发编程

    同步容器 1、同步容器的思路:隐藏状态、对象访问加锁2、同步容器单个操作都是线程安全的,但是复合操作不是线程安全的...

  • 多线程概念初记

    在实际生产过程中,多线程的线程安全性是非常复杂的,如果没有进行充足的同步操作,多线程中的操作执行顺序是难以预测的。...

  • 并发—高并发

    并发:多个线程操作相同的资源,保证线程安全,合理使用资源高并发:服务能同时处理很多请求,提高程序性能 线程安全性 ...

  • 身为JAVA工作者必须了解的实战知识(一)

    一、什么是线程安全性 编写线程安全的代码 核心在于要对状态访问操作进行管理。 共享,可变的状态的访问 - 前者表示...

网友评论

      本文标题:复合操作---线程安全性

      本文链接:https://www.haomeiwen.com/subject/lppbuftx.html