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

长沙网站优化外包服务如何在百度上做推广

长沙网站优化外包服务,如何在百度上做推广,多个 管理 wordpress,舆情监控一般多少钱目录 饿汉模式懒汉模式单线程版多线程版双重检查锁定 阻塞队列 单例模式能保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例,并提供一个全局访问点。 饿汉模式 类加载的同时,创建实例。 class Singleton {private static final Singlet…

目录

  • 饿汉模式
  • 懒汉模式
    • 单线程版
    • 多线程版
    • 双重检查锁定
  • 阻塞队列

单例模式能保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例,并提供一个全局访问点。

饿汉模式

类加载的同时,创建实例。
在这里插入图片描述

class  Singleton {private static final Singleton instance = new Singleton();//将构造方法设为私有,以防止外部通过new关键字创建新的实例。private Singleton() {}public static Singleton getInstance() {return instance;}
}
  • 上述代码定义了一个名为Singleton的类。
  • 在类中定义了一个私有的静态常量instance,它是Singleton类的一个唯一实例。
  • 提供了一个公共的静态方法getInstance(),用于获取Singleton类的唯一实例。

懒汉模式

类加载的时候不创建实例,第一次使用的时候才进行创建。
在这里插入图片描述

单线程版

class Singleton {private static Singleton instance = null;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}

多线程版

上述单线程代码在多线程中就会出现错误,多个线程同时调用getInstance()方法时,就可能导致创建出多个实例是不安全的。这里我们只需要在getInstance()方法中添加synchronized关键字就可解决。

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

双重检查锁定

class Singleton {//volatile关键字保证了instance变量在多线程环境下的可见性。private static volatile Singleton instance = null;private Singleton() {}public synchronized static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class){if (instance == null ){instance = new Singleton();}}}return instance;}
}

双重检查可以这样进行理解:
第一次if先判断实例有没有被创建,如果没被创建就进入第一个if内,使一个线程成功获取锁(其余线程进行阻塞等待),线程获取锁后再次进行判断,判断实例是否创建,没有创建就进行创建。当这个实例创建完了之后,其他竞争到锁的线程就被里层 if 挡住了,也就不会继续创建其他实例。

阻塞队列

阻塞队列能是一种线程安全的数据结构, 并且具有以下特性:

  • 当队列满的时候, 继续入队列就会阻塞, 直到有其他线程从队列中取走元素.
  • 当队列空的时候, 继续出队列也会阻塞, 直到有其他线程往队列中插入元素.

阻塞队列的一种典型应用场景就是生产者消费者模型。

在 Java 标准库中内置了阻塞队列。 如果我们需要在一些程序中使用阻塞队列,直接使用标准库中的即可。

  • BlockingQueue 是一个接口,真正实现的类是 LinkedBlockingQueue
  • put 方法用于阻塞式的入队列,take 用于阻塞式的出队列
  • BlockingQueue 也有 offer, poll, peek 等方法, 但这些方法不带有阻塞特性

下面我们来实现一个阻塞队列:

  • 通过循环队列的方式
  • 使用 synchronized 进行加锁控制
public class BlockingQueue {private int[] arr = new int[1000];private volatile int size = 0;private int tail = 0;private int head = 0;public void put(int value) throws InterruptedException {synchronized (this) {while (size == arr.length) {wait();}arr[tail] = value;tail = (tail + 1) % arr.length;size++;notifyAll();}}public int take() throws InterruptedException {int ret = 0;synchronized (this) {while (size == 0) {wait();}ret = arr[head];head = (head + 1) % arr.length;size--;notifyAll();}return ret;}public static void main(String[] args) throws InterruptedException {BlockingQueue bq = new BlockingQueue();Thread t1 = new Thread(() -> {try {for (int i = 0; i < 10; i++) {bq.put(i);System.out.println("生产者放入:" + i);Thread.sleep(1000);}} catch (InterruptedException e) {e.printStackTrace();}});t1.start();Thread t2 = new Thread(() -> {try {for (int i = 0; i < 10; i++) {int num = bq.take();System.out.println("消费者取出:" + num);Thread.sleep(1000);}} catch (InterruptedException e) {e.printStackTrace();}});t2.start();t1.join();t2.join();}
}

在这里插入图片描述

http://www.shuangfujiaoyu.com/news/20097.html

相关文章:

  • 安顺住房和城乡建设部网站sem论坛
  • 商品管理系统杭州seo托管公司推荐
  • 品牌网站建设联系方式互联网营销师报名费
  • web设计网站nba最新排行
  • 外贸b2c网站的建设和优化以及站外链接建设方案中国职业培训在线平台
  • 苹果软件 做ppt模板下载网站手机百度正式版
  • 建网站 技术百度站长工具seo综合查询
  • 在国内做敏感网站b站推广入口2023mmm
  • 西部数码成品网站后台cms建站系统
  • 路由器做网站教程seo排名点击器曝光行者seo
  • 成都网站建设托管百度网站推广关键词怎么查
  • 门户网站源码入驻seo如何提高网站排名
  • 宁德网站开发环球军事网最新消息
  • 网站上的定位功能如何实现的网站运维
  • h5网站的优势百度营销客户端
  • 邮箱163注册青岛快速排名优化
  • 哪里有专业做网站河南网站seo靠谱
  • 网站设计服务表app平台搭建需要多少钱
  • 如何建一个视频网站微信广点通广告平台
  • 广州建设工程交易中心改版西安seo按天收费
  • 16岁学生免费开网店seo推广软件排行榜
  • 网站右击无效是怎么做的网站流量排行
  • 怎么运用区块链做网站seo的优化原理
  • 惠东网络建站公司宁波关键词优化平台
  • 嘉兴做网站哪家好市场推广工作内容
  • 南海佛山网站建设一份完整的活动策划方案
  • 网络营销导向企业网站建设的原则郑州seo线下培训
  • 用一个口罩做一把枪宁波seo服务推广
  • 知名网站建设平台如何在网上推广自己的产品
  • 网站欢迎页面 特效app接入广告变现