`
xiaoZ5919
  • 浏览: 405473 次
  • 性别: Icon_minigender_1
  • 来自: 安平人@北京
博客专栏
Group-logo
Netty学习笔记
浏览量:73253
社区版块
存档分类
最新评论

用CountDownLatch和AtomicReference解决cache失效大并发透传DB的思路

 
阅读更多
  cache失效大并发透传DB,在TimYang的一篇博文Memcache mutex设计模式介绍过。提到了两种方案。其中第一方案的sleep时长不好把握。
if (memcache.get(key) == null) {
    // 3 min timeout to avoid mutex holder crash
    if (memcache.add(key_mutex, 3 * 60 * 1000) == true) {
        value = db.get(key);
        memcache.set(key, value);
        memcache.delete(key_mutex);
    } else {
        sleep(50);
        retry();
    }
}
我们假设在单机cache中解决这个问题,不涉及分布式锁。可不可以做到用notify代替sleep。memcached的add操作可以演绎成java的cas操作,cas成功的线程从db中取数据,失败的线程进入wait状态,当成功的线程设置cache以后,notify所有等待的线程,他们就可以从cache中取数据了。那么如何实现notify呢?首先我们想到了CountDownLatch,基本代码如下:
  
CountDownLatch latch = new CountDownLatch(1);
            if(_reference.compareAndSet(null, latch)){
                // Fetch from DB
                //if done
                 System.out.println("Thread:" + Thread.currentThread().getName() +" I'm here  Get DB");
                 cache.put("a", "1");
                _reference.get().countDown();
                _reference.set(null);
                
            }else{
                try {
                    CountDownLatch la = _reference.get();
                    System.out.println("Thread:" + Thread.currentThread().getName() +" I'm here Wait  Result" + cache.get("a"));
                    la.await();
                    System.out.println("Thread:" + Thread.currentThread().getName() +" I'm here Get   Result" + cache.get("a"));
                    //something to do
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
 
 
0
0
分享到:
评论

相关推荐

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴 java并发编程中CountDownLatch和CyclicBarrier是两个非常重要的线程控制和调度工具,经常被用于解决多线程程序设计中的线程等待问题。本文将对...

    CountDownLatch、Semaphore等4大并发工具类详解

    本文将详细介绍 Java 并发工具类的四大类:CountDownLatch、Semaphore、CyclicBarrier 和 Phaser,及其应用场景和使用方法。 CountDownLatch CountDownLatch 是一个同步的辅助类,允许一个或多个线程,等待其他一...

    java 高并发解决 思路

    以上只是Java高并发解决思路的一部分,实际应用中还需要结合具体业务场景和性能需求进行选择和优化。"高并发web架构.pdf"文档中的实例将进一步细化这些概念,提供实践指导。在学习过程中,理论与实践相结合,才能更...

    CountDownLatch和CyclicBarrier用法实例大全

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...

    java.并发工具类CountDownLatch(解决方案).md

    java.并发工具类CountDownLatch(解决方案).md

    并发编程之CountDownLatch

    CountDownLatch 并发编程 CountDownLatch 是一个同步的辅助类,它可以允许一个或多个线程等待,直到一组在其它线程中的操作执行完成。它通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了...

    java并发编程中CountDownLatch和CyclicBarrier的使用.pdf

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具,用于协调多个线程之间的交互。它们都属于java.util.concurrent包下的类,为多线程编程提供了强大的支持。 **CountDownLatch** 是一个...

    利用 CountDownLatch 类实现线程同步

    2. **并发测试**:在测试中,可以创建多个线程模拟并发执行,然后使用 `CountDownLatch` 让测试代码等待所有并发操作完成,确保测试结果的正确性。 3. **框架设计**:在自定义框架或库中,如果有多个组件或服务需要...

    java并发编程艺术

    此外,书中可能还会涉及其他并发编程相关的高级话题,比如原子变量(`AtomicInteger`, `AtomicReference`等)、并发工具类(如`CountDownLatch`, `CyclicBarrier`, `Semaphore`)以及Fork/Join框架。这些工具可以...

    Java高并发视频教学,并带实战java高并发程序设计,高并发面试题目

    它可能详细解释了线程的生命周期、线程安全问题(如数据竞争、活锁、死锁)、并发工具类(如CountDownLatch、CyclicBarrier、Semaphore)的使用,以及Java内存模型(JMM)和volatile关键字的作用。此外,还可能探讨...

    并发控制艺术:掌握CountDownLatch与Semaphore

    并发编程是现代软件开发的核心,尤其在互联网应用中显得尤为重要。在这个领域,理解并正确使用同步工具,如CountDownLatch和Semaphore,是至关重要的...它们的正确使用能极大提高应用程序的性能,特别是在高并发场景下

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁)

    在IT行业中,数据库操作是应用开发中的重要环节,特别是在大数据量的情况下,如何高效地进行数据插入成为了一个关键问题。MyBatis,作为一个优秀的Java持久层框架,提供了多种优化手段,其中包括多线程和批处理技术...

    Java并发编程与高并发解决方案(高清视频教程).rar

    Java并发编程是Java开发语言中的一个关键领域,特别是在构建高性能、高并发的后端...阅读提供的"Java并发编程与高并发解决方案(高清视频教程).txt"文件,可以进一步了解课程内容和结构,从而有针对性地学习和提升。

    多线程countDownLatch方法介绍

    在Java多线程编程中,CountDownLatch是一个非常重要的同步工具类,它可以帮助我们协调多个线程之间的交互。本文将深入探讨CountDownLatch的工作...理解其工作原理和应用场景,能帮助开发者更好地设计和优化并发程序。

    JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程

    ### JAVA并发编程与高并发解决方案 #### 一、并发编程基础 ##### 1.1 并发的概念 在计算机科学中,并发是指多个任务或进程同时进行的现象。它不同于并行,后者指的是多个处理器或核心同时执行不同的指令。在Java中...

    CountDownLatch练习

    在实际编程中,熟练掌握CountDownLatch可以帮助我们更有效地编写高并发程序,解决复杂的同步问题。通过阅读和理解提供的代码样例(如`countdownlatch`文件),可以进一步加深对CountDownLatch的理解和应用。

    java并发工具类(CountDownLatch+Semaphore+Exchanger)

    Java并发工具类是Java并发编程中的重要组成部分,其中包括了多种实用的工具,如CountDownLatch、Semaphore和Exchanger,这些工具类极大地简化了多线程环境下的同步和协调问题。 1. **CountDownLatch**: ...

    《Java并发编程高阶技术-高性能并发框架源码解析与实战》学习.zip

    在Java的世界里,并发编程是提升系统性能、优化资源利用率的关键所在,尤其是在多核处理器和大规模分布式系统中。 本书的焦点在于Java并发框架,这些框架如线程池(java.util.concurrent.ThreadPoolExecutor)、...

Global site tag (gtag.js) - Google Analytics