网站项目设计书机关单位网站建设的重要性

news/2025/9/25 23:22:41/文章来源:
网站项目设计书,机关单位网站建设的重要性,做舞美的好素材网站j,个人网站怎么做视频JAVA种有两种保证线程安全的方式#xff0c;分别叫懒汉式Lazy Initialization和饿汉式Eager Initialization#xff0c;以下是他们的区别#xff1a; 线程安全性#xff1a; 懒汉式本身是非线程安全的#xff0c;因为多个线程可能同时检查实例是否为null#xff0c;并尝…JAVA种有两种保证线程安全的方式分别叫懒汉式Lazy Initialization和饿汉式Eager Initialization以下是他们的区别 线程安全性 懒汉式本身是非线程安全的因为多个线程可能同时检查实例是否为null并尝试同时创建实例会导致出现多个实例。为了解决这个问题需要额外的同步机制如双重检查锁定double-checked locking或静态内部类等方式。 而饿汉式最开始就static和final了天生就是线程安全的。 实例创建时机不同 懒汉式在类被创建时不立即创建实例而是在第一次调用 类名.getInstance() 方法时才创建实例实现了延迟加载(非线程安全)。 饿汉式直接在最开始就static final SingletonEager instance new SingletonEager()直接创建完毕了(自带安全属性)。 资源加载和性能不同 懒汉式(慢)延迟了实例的创建只有在真正需要使用时才会进行初始化因此可以节省资源。但在第一次调用 getInstance() 方法时由于需要创建实例可能会有一定的性能延迟。 饿汉式(快浪费内存)对象在加载时已经创建因此无论是否适用单例对象都会占用一定内存。但是由于对象已经提前初始化第一次调用getInstance方法速度会更快。 饿汉式本身就是线程安全的 饿汉式Eager Initialization开始就直接创建不调用也存在占内存调用跑起来快自带线程安全属性。 饿汉式举例 public class EagerSingleton { private static final EagerSingleton INSTANCE new EagerSingleton(); private EagerSingleton() { // 私有构造函数 } public static EagerSingleton getInstance() { return INSTANCE; } }使用举例 package ThreadPool;public class Test {public static void main(String[] args) {EagerSingleton e1 EagerSingleton.getInstance();EagerSingleton e2 EagerSingleton.getInstance();System.out.println(e1e2);}}class EagerSingleton{private EagerSingleton() {}private static final EagerSingleton instance new EagerSingleton();public static EagerSingleton getInstance(){return instance;} }运行结果 true懒汉式 懒汉式Lazy Initialization 下面是一个非线程安全的一般懒汉式示例不建议使用除非有额外的同步机制 public class LazySingleton { private static LazySingleton instance; private LazySingleton() { // 私有构造函数 } public static LazySingleton getInstance() { if (instance null) { instance new LazySingleton(); } return instance; } }线程安全的懒汉式示例使用双重检查锁定 第一次判断if (instance null) 再进行下面的线程synchronized, 如果实例已经存在直接都不用管线程synchronized那些程序块直接return输出了。 public class ThreadSafeLazySingleton { private static volatile ThreadSafeLazySingleton instance; private ThreadSafeLazySingleton() { // 私有构造函数 } public static ThreadSafeLazySingleton getInstance() { if (instance null) { // 第一次检查实例是否存在 synchronized (ThreadSafeLazySingleton.class) { if (instance null) { // 第二次检查实例是否存在 instance new ThreadSafeLazySingleton(); } } } return instance; } }补充知识点 volatile是一个关键字用于修饰变量。当一个变量被声明为volatile时它意味着这个变量在多线程环境下是可见的和有序的。这有助于确保线程安全但它并不保证复合操作的原子性。例如自增操作实际上包括读取、增加和写入三个步骤如果多个线程同时对一个volatile变量进行自增操作那么结果可能会不正确。在下面的例子中volatile被用在在Bank instance的定义中。 示例2构建一个银行单例使用三个线程分别调用它保证线程安全条件下(三个线程调用的是同一个银行instance)输出“线程名字 My Private Bank is building up! ” package ThreadPool;public class Test3 {public static void main(String[] args) {//创建三个BankThread对象BankThread b1 new BankThread();BankThread b2 new BankThread();BankThread b3 new BankThread();//分别启动这三个线程因为Bank类是单例的因此所有线程都将获取到同一个Bank对象实例b1.start();b2.start();b3.start();}}//一个专门构建的可以调用Bank类的Thread类 class BankThread extends Thread{Overridepublic void run() {Bank bank Bank.getInstance();bank.PrintBank();} }//构建Bank类实现了懒汉单例模式 //两层if(instance null)和 synchronized (Bank.class)确保线程安全 class Bank{private static volatile Bank instance;private Bank() {}static Bank getInstance(){if(instance null){synchronized (Bank.class){if(instance null){instance new Bank();}}}return instance;}public void PrintBank(){System.out.println(Thread.currentThread().getName() My Private Bank is building up! );} } 运行输出 Thread-0 My Private Bank is building up! Thread-1 My Private Bank is building up! Thread-2 My Private Bank is building up! Process finished with exit code 0 饿汉式和懒汉式的主要区别在于实例的创建时机和线程安全性。饿汉式在类加载时即创建实例线程安全且性能较高首次调用速度快但可能浪费资源即使实例从未被使用。懒汉式则延迟了实例的创建节省了资源但需要在多线程环境下采取额外的同步措施来保证线程安全。在实际应用中应根据具体需求选择适合的实现方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#学习3

面向对象编程进阶 继承 csharp // 基类 public class Animal { public string Name public virtual void Speak() { Console.WriteLine("动物发出声音"); } }// 派生类 public class Dog : Animal { public …

9-23

(1)今天预习了java的课程 (2)明天继续深造

9-26

(1)今天预习了java的课程 (2)明天继续深造

微信网站设计运营北京网站建设哪家专业

Prefect 是一个用于构建、调度和监控数据流程的 Python 库。它提供了一种简单而强大的方式来管理 ETL(Extract, Transform, Load)工作流程。下面是一个简单的示例,演示了如何使用 Prefect 来创建和运行一个简单的任务: 首先&…

长春网长春网站建设站建设服务专业建设

Sftp服务器搭建(linux) 一、基本工作原理 FTP的基本工作原理如下: 1)建立连接:客户端与服务器之间通过TCP/IP建立连接。默认情况下,FTP使用端口号21作为控制连接的端口。​​​​​​​ 2)身…

Ubuntu Uninstall App

dpkg -lsudo apt purge firefox

20250925

今天算法与数据结构课学链表,链表是一种线性数据结构,通过指针将一系列节点连接起来,每个节点包含数据域和指针域。和数组相比,链表不需要预先分配固定大小的空间,在插入和删除元素时更灵活。老师写代码演示如何创…

题解:P2662 牛场围栏

省流:同余最短路 本题是一道同余最短路算法的好题。接下来讲讲个人对这道题的理解。 首先,根据题意,我们知道,我们可以获得最多 \(m \times (m +1)\) 种木棍长度。我们设 \(t\) 为这个最大值,则木棍长度可表示为 …

day11 课程(学员管理系统案例)

day11 课程(学员管理系统案例)课程:https://www.bilibili.com/video/BV1o4411M71o?spm_id_from=333.788.videopod.episodes&p=204 11.1 函数加强简介------------------------------------------------ 执行后…

c语言初步学习

c语言初步学习学习c语言必须知道的代码 int main() {return 0; }在c语言里main函数是整个函数的入口点括号用来接收参数,括号为空则不接受外部数据符号皆为英文标点int是为了表明return后面的东西的类型

企业网站适合响应式嘛用ps可以做网站吗

分区的概念 分区实质上是根据特定的规则,将表划分为若干个独立的物理存储单位。以MySQL为例,表会被拆分为多个物理文件。而在OceanBase​​​​​​​中,每个分区则表现为一个物理副本组,每个分区默认都拥有三个副本。 分区表的优…

庐山网站建设大数据营销工具

要解决的问题 如何记录请求经过多个分布式服务的信息,以便分析问题所在?如何保证这些信息得到完整的追踪?如何尽可能不影响服务性能? 追踪 当用户请求到达前端A,将会发送rpc请求给中间层B、C;B可以立刻作…

Cloudflare安全验证过程全解析

本文详细解析了OpenBugBounty网站通过Cloudflare进行安全验证的完整流程,包括人机验证、连接安全检查、JavaScript启用要求等关键环节,揭示了现代Web安全防护的核心技术实现。验证流程分析 初始验证阶段 网站显示&qu…

2025.9.25总结 - A

今天上午是数据结构和篮球,收获颇多,强身健体。

天津企业模板建站在wordpress中设置mx记录

一般这种问题是因为某个文件/某个文件夹/某些文件夹过大导致整个项目超过1G了导致的 试过其他教程里的设置depth为1,也改过git的postBuffer,都不管用 最后还是靠克隆指定文件夹这种方式成功把项目拉下来 1. Git Bash 输入命令 git clone --filterblob:none --sparse 项目路径…

建设局查询网站哪做网站比较好

文章目录 地址下载启动 使用 地址 JMeter官网下载:https://jmeter.apache.org/download_jmeter.cgi 下载 最新款的jmeter需要java8的支持,请自行安装jdk8或以上的版本 根据系统不同系统下载zip或者是tgz格式的压缩包,并解压,博…

团购网站建设公司做邮轮上哪个网站订票好

2023-2024华为ICT大赛 计算赛道 广东省 省赛 初赛 高职组 部分赛题 分析【2023.11.18】 文章目录 单选题tpcds模式中存在表customer,不能成功删除tpcds模式是( )以下哪个函数将圆转换成矩形( )下列哪个选项表示依赖该D…

做宣传图片的网站互联网保险乱象

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

US$128 OBD II Adapter Plus OBD Cable Works with CKM100 and DIGIMASTER III for Key Programming

OBD II Adapter Plus OBD Cable Works with CKM100 and DIGIMASTER III for Key ProgrammingNote: Connect the adapter cable with device firstly! Then connect the cable with car OBD socket.Special Function: S…

jmeter函数

__Random产生一个随机数 #${__Random(起始,终止,变量名)} ${__Random(0,10, num)} 引用变量:${num}__RandomDate指定时间段产生一个日期 #${__RandomDate(时间指定格式(默认yyyy mm dd),起始时间,终止时间,语言…