美文网首页
java什么是过度竞争以及如何使用库提供的同步类一定程度避免过度

java什么是过度竞争以及如何使用库提供的同步类一定程度避免过度

作者: 每天学点编程 | 来源:发表于2018-02-20 13:29 被阅读14次

    请关注我的微信公众号

    个人微信公众号

    技术交流群 (仅作技术交流):642646237

    ​请关注我的头条号:

    过度竞争(过多的线程尝试同时使用一个共享资源)

    消费者花费大量时间等待被其他消费者锁住的counts,它们的等待时间比实际运算时间还要长,最终导致惨烈的性能下降。

    java.util.concurrent包的ConcurrentHashMap

    提供了原子的读-改-写方法,使用了更高级的并发访问(锁分段(lock striping)技术)。


    ConcurrentHashMap的putIfAbsent()

    如果指定键没有与某值关联,则将指定键与指定值进行关联,该操作具有原子性。

    ConcurrentHashMap的replace()

    仅当指定键与指定旧值关联时,将指定键与指定新值进行关联,该操作具有原子性。

    当使用这些函数时,需要检查其返回值来判断是否操作成功。如果没有成功,则需要重试。

    并没有消除共享变量竞争

    当增加到4个以上的消费者时,计算速度开始下降,并也没能达到2倍的提速。
    只是一定程度减少了共享变量的竞争。

    相关文章

      网友评论

          本文标题:java什么是过度竞争以及如何使用库提供的同步类一定程度避免过度

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