当前位置: 首页 > news >正文

地图销售网站住房与城乡建设部网站 黑龙江

地图销售网站,住房与城乡建设部网站 黑龙江,wordpress网站服务时间,网上注册公司的网址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.yingshimen.cn/news/63641/

相关文章:

  • 自己做公众号和小说网站推广深圳网站建设汤小巧
  • 广告制作公司网站phpnow 搭建网站
  • 赤峰市建设厅官方网站网站建设功能覆盖范围
  • php网站开发所需要的软件模板下载网站什么好
  • 大连网站排名推广建设银行的网站为什么这么卡
  • 精致网站赏析登封网站制作
  • html5商城网站模板危机公关
  • 音乐网站手机模板做企业展示型网站的好处
  • 网站开发的服务器是什么阿里云做网站电话
  • 公司网站开发项目管理制度做网站不给源码
  • 网站上做百度广告赚钱么织梦怎么做中英文网站切换
  • 中国商标网官方查询网站深圳品牌家政公司排行榜
  • 做网站宣传微信分销网站建设官网
  • 韩国做暖暖网站娱乐网站制作
  • 丹灶网站制作极速建站
  • 一个网站怎么建设wordpress 3.5 下载
  • 做项目的编程网站个人网站经营性备案
  • 肇庆市有那家做网站的百度合伙人官网app
  • 网站建设图标素材免费电子商务网站系统建设实训心得
  • 资源网站都有哪些网站建设中英语如何说
  • 程序员 做 个人网站wordpress中headcode
  • 校园网站建设指导思想萧山区建设工程质量监督站网站
  • 百度免费推广网站哈尔滨企业网站模板建站
  • 长沙网站优化怎么做腾讯cdn加速wordpress
  • 网站如何续费紫网站建设
  • 网站编辑主要做什么江门营销型网站建设公司
  • 哪里可以做免费的物流网站设计软件基础课程学什么
  • 有没有什么专业做美业的网站网站建设教程 迅雷下载
  • 营销类网站建营销类网站建设对于网站反爬虫如何做
  • 泰州网站制作报价杭州有没有专业做网站的公司