美文网首页技术分享
Java 并发系列十二 : Balking模式-再谈线程安全的单

Java 并发系列十二 : Balking模式-再谈线程安全的单

作者: 逗逼程序员 | 来源:发表于2019-11-11 10:21 被阅读0次

前言

感谢王宝令老师极客时间的并发课程

业务场景

我们经常使用的的编辑器功能,如果内容发生了变更 执行自动存盘操作,如果没有发生变更,则不进行存盘操作。这个场景如果利用 Balking 模式该如何实现呢?

Balking 模式的经典实现

Balking 模式本质上是一种规范化的解决“多线程版本的 if”的方案, 对于上面自动保存的例子,使用Balking 模式规范化周的写入如下:

    boolean changed = false;

    void save() {

        synchronized (this) {
            if (!changed) {
                return;
            }
            changed = false;
        }
        //执行存盘操作
        //execSave();
    }

    void edit() {
        //编辑内容,并修改变更状态标识
        change();
    }

    void change() {
        synchronized (this) {
            changed = true;
        }
    }

将edit() 方法中对共享变量changed 的操作赋值操作抽取到了change() 中,这样做的好处就是将并发逻辑和业务逻辑分开。

用 volatile 实现 Balking 模式

前面我们用synchronized 实现了Balking 模式,,这种实现方式最为稳妥,建议你实际工作中也使用上述模式。不过某些场景下也可以使用volatile 来实现。

总结

Balking 模式和 Guarded Suspension 模式从实现上看似乎没有多大的关系, Balking 模式只需要用到互斥锁就能实现,而Guarded Suspension 模式需要用到管程种种高级并发原语,但是从应用的角度来讲,他们解决的都是“线程安全的 if”语义, 不同之处在于,Guarded Suspension 模式会等待 if 条件为真, 而 Balking 模式不会等待。

Balking 模式的经典实现是使用互斥锁,你可以使用 Java 语言内置 synchronized,也可以使用 SDK 提供 Lock;如果你对互斥锁的性能不满意,可以尝试采用 volatile 方案,不过使用 volatile 方案需要你更加谨慎。

相关文章

  • Java 并发系列十二 : Balking模式-再谈线程安全的单

    前言 感谢王宝令老师极客时间的并发课程 业务场景 我们经常使用的的编辑器功能,如果内容发生了变更 执行自动存盘操作...

  • Balking模式:再谈线程安全的单例模式

    Guarded Suspension 模式需要等待的,必须要等到条件为真。但有些场景下,我们需要快速放弃。最常见的...

  • 单例

    单例,是Java中很重要的一个设计模式。 实现单例是要考虑并发(线程安全)问题的。 如何实现一个线程安全的单例?你...

  • Balking模式

    Balking模式:“多线程版本的if”的应用场景。 1,使用synchronized实现Balking模式,这种...

  • Java 单例模式

    概述 Java中单例模式是一种常见的设计模式,单例模式总共有7种写法。 懒汉,线程不安全 懒汉,线程安全 饿汉 饿...

  • Java多线程(二十五)---ConcurrentLinkedQ

    移步java多线程系列文章 ConcurrentLinkedQueue 在并发编程中,有时候需要使用线程安全的队列...

  • 后端架构师技术图谱(三)-并发、锁、设计模式(二)

    并发 多线程 《40个Java多线程问题总结》 线程安全 《Java并发编程——线程安全及解决机制简介》 一致性、...

  • 高并发Java

    高并发Java(1):前言 高并发Java(2):多线程基础 高并发Java(3):Java内存模型和线程安全 高...

  • Java基础20-初识synchronized

    概述 如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题? 基本上所有的并发模式...

  • 单例模式汇总

    Java单例模式 java单例模式是为了让全局只实例化一个对象,常用的方式包括懒汉模式、饿汉模式,考虑到线程安全,...

网友评论

    本文标题:Java 并发系列十二 : Balking模式-再谈线程安全的单

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