JUC并发编程 多线程设计模式 -- 同步模式之 Balking

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUC并发编程 多线程设计模式 -- 同步模式之 Balking相关的知识,希望对你有一定的参考价值。

1. 同步模式之 Balking


1.1 定义

Balking (犹豫)模式用在一个线程发现另一个线程或本线程已经做了某一件相同的事,那么本线程就无需再做了,直接结束返回


1.2 实现

例如:

        public class MonitorService {
            // 用来表示是否已经有线程已经在执行启动了
            private volatile boolean starting;
            public void start() {
                log.info("尝试启动监控线程...");
                synchronized (this) {
                    if (starting) {
                        return;
                    }
                    starting = true;
                }

                // 真正启动监控线程...
            }
        }

当前端页面多次点击按钮调用 start 时 输出 :


1.3 它还经常用来实现线程安全的单例

public final class Singleton {
 private Singleton() {
 }
 private static Singleton INSTANCE = null;
 public static synchronized Singleton getInstance() {
	 if (INSTANCE != null) {
		 return INSTANCE;
 }
 
 INSTANCE = new Singleton();
 return INSTANCE;
 }
}

对比一下保护性暂停模式:保护性暂停模式用在一个线程等待另一个线程的执行结果,当条件不满足时线程等待。



以上是关于JUC并发编程 多线程设计模式 -- 同步模式之 Balking的主要内容,如果未能解决你的问题,请参考以下文章

JUC并发编程 多线程设计模式 -- 同步模式之保护性暂停(定义 & 实现 & 带超时版 GuardedObject)

JUC并发编程 多线程设计模式 -- 同步模式之保护性暂停(join方法原理 & 保护性暂停-扩展-解耦等待和生产)

JUC并发编程 多线程设计模式 -- 异步模式之生产者/消费者

JUC并发编程 共享模式之工具 ThreadPoolExecutor 多线程设计模式 -- 异步模式之工作线程(定义饥饿 & 解决饥饿 & 线程池创建多少线程数目合适)

JUC并发编程 共享模式之工具 JUC 线程安全的集合类 -- 线程安全的集合类概述

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch(使用CountdownLatch原理改进: 配合线程池使用)