go 系列之 once

devtools/2024/11/15 4:54:45/

一、简介

       once 方法用于保证指定函数只执行一次。例如配置懒加载,客户端获取密钥等场景,都可以用到once。

二、技术实现

2.1 Once.go
type Once struct {done atomic.Uint32m    Mutex
}func (o *Once) Do(f func()) {if o.done.Load() == 0 {o.doSlow(f)}
}func (o *Once) doSlow(f func()) {o.m.Lock()defer o.m.Unlock()if o.done.Load() == 0 {defer o.done.Store(1)f()}
}
type DemoClient struct {secretKey stringonce      sync.Once
}func (c *DemoClient) getSecretKey() string {c.once.Do(func() {c.secretKey = string(rand.Int63())})return c.secretKey
}
2.2 Once.java
public class Once {private volatile  boolean done = false;private Runnable func;public Once(Runnable func) {this.func = func;}public void exec(){if (done){return;}synchronized (this){if (!done){func.run();done = true;}}}
}
/**
* 使用样例
*/
public class DemoClient {private String secretKey;private Once once = new Once(()->{secretKey = RandUtil.randAlpha(32);});public String getSecretKey(){once.exec();return secretKey;}
}


http://www.ppmy.cn/devtools/97800.html

相关文章

使用哪种方式可以将 MATLAB 算法转换到FPGA中运行?

FPGA在进行相关算法计算时,一般都会使用高级语言进行算法验证,目前比较常见的就是 MATLAB ,那么使用哪种方式可以将MATLAB中实现的算哒转换到FPGA中? 目前可以通过多种方式在 FPGA 中实现算法。 Simulink HDL Coder MathWorks 提供…

小程序商城被盗刷,使用SCDN安全加速有用吗?

在电子商务蓬勃发展的今天,小程序商城因其便捷性和灵活性成为商家和消费者的新宠。然而,随着其普及,小程序商城的安全问题也日益凸显,尤其是盗刷现象频发,给商家和用户带来了巨大损失。面对这一挑战,是否可…

springboot的学习(四):bean的加载和控制

简介 主要是加载bean的方式已经加载bean的控制 spring加载bean方式 在xml中使用bean标签声明bean,启动类中使用ClassPathXmlApplicationContext加载xml在xml中自定义命名空间,配置自动扫描,对于加载自定义的bean,在类上添加com…

ActiveMQ、RabbitMQ、Kafka、RocketMQ在事务性消息、性能、高可用和容错、定时消息、负载均衡、刷盘策略的区别

ActiveMQ、RabbitMQ、Kafka、RocketMQ这四种消息队列在事务性消息、性能、高可用和容错、定时消息、负载均衡、刷盘策略等方面各有其特点和差异。以下是对这些方面的详细比较: 1. 事务性消息 ActiveMQ:支持事务性消息。ActiveMQ可以基于JMS&#xff08…

操作系统(Ubuntu安装配置)

1.1.什么是操作系统 操作系统(Operating System,简称OS)是一种系统软件,它是计算机硬件和应用软件之间的桥梁。它管理计算机的硬件和软件资源,为应用程序提供接口和服务,并协调应用程序的运行。操作系统是…

高性能内存对象缓存

Memcached概述 一套开源的高性能分布式内存对象缓存系统 所有的数据都存储在内存中 支持任意存储类型的数据 提高网站的访问速度 数据存储方式与数据过期方式 数据存储方式:Slab Allocation 按组分配内存,每次先分配一个Slab,相当于一个大小为1M的页&…

前端跨域2

前端跨域2 前端跨域解决方案&#xff08;11种方案&#xff09; 1.JSONP跨域解决方案的底层原理 script、img、link、iframe...<script src"https://cdn.bootcss.com/jquery/3.4.1/core.js"></script>// 这个就是因为script标签没有跨域限制&#xff0…

做谷歌seo如何创建良好的用户体验?

Google 希望排名靠前的页面能够为用户提供良好的体验&#xff0c;所以网站提升用户体验很重要。以下是一些实用的小建议&#xff0c;让你的网站更受用户欢迎&#xff0c;并且有助于提升你的 SEO 排名。 现代化设计&#xff1a;确保你的网站设计符合当前的审美和功能趋势。使用高…