java基础——线程安全的单例模式懒汉式

package savesingleton;
/*
使用同步将单例模式中的懒汉式改写成线程安全的

@author zsben
@create 2020-01-03 22:22
*/

class Bank{

    private  Bank(){}

    private  static Bank instance = null;

    /*public static synchronized Bank getInstance(){
        if(instance == null){
            instance = new Bank();
        }
        return instance;
    }较为低效
    */

    //高效办法:内外各判一次
    public static Bank getInstance(){
        if(instance == null){
            //里面一定要再判一次:想想为什么,再加一层是为了防止有多个线程同时进入,所以内层再加一层
            synchronized (Bank.class) {
                if(instance == null) {
                    instance = new Bank();
                }
            }
        }
        return instance;
    }

}

原文地址:https://www.cnblogs.com/zsben991126/p/12148319.html

时间: 2024-08-03 21:25:31

java基础——线程安全的单例模式懒汉式的相关文章

Java基础——线程总结

Java基础--线程总结 一.线程是什么? 线程:一个程序里不同的执行路径. 二.如何创建线程? 两种方法创建线程: 第一种 (1)定义具体功能类实现Runnable接口,可以多次调用而实现数据共享 (2)Thread myThread = new Thread(-)          //参数为Runnable接口类型 (3)Runnable中只有一个方法 public void run(){--} //用以定义线程运行体 第二种 (1)定义一个Thread的子类并重写run()方法 clas

java 实现线程安全的单例模式

一.平时使用的软件中,例如 回收站.线程池.文件系统等,都只有一个实例,这些都是单例模式的典型应用. 单例模式:确保某个类只有一个实例,并提供一个全局访问点来访问这个实例. 单例模式有三个要点: 1. 某个类只能有一个实例 2. 必须自行创建这个实例 3. 必须自行向整个系统提供这个实例. 以上三个要点提示着我们的代码编写需要注意,构造函数必须私有,否则在其他类中便可以调用构造函数创建实例,难以保证实例的唯一性. 二.单例模式分为饿汉模式和懒汉模式 //饿汉模式:(线程安全) public cl

java基础--线程并发

线程的使用方法: public static void main(String[] args) {     Runnable r = ()->{         while (true) {             System.out.println("this is thread");         }     };     Thread t = new Thread(r);     t.start();     while (true) {         System.

Java基础-线程

/** * 程序是静态的数据 进程是动态的程序 线程是进程中的一个连续的控制流 * 程序:Code+Data * 进程:程序+CPU * 线程:创建+就绪+运行+阻塞+销毁 * * 2种生成线程类的方法 * 继承:java.lang.Thread+对象.start(); * 实现:java.lang.Runnable+借助Thread类对象.start(); * 2种方式都要重写run() * * 常用方法 * sleep(long time); * 主动休眠 yield(); * 主动让出CP

java基础——线程同步块

实现Runnable的线程同步块 package synchronization.block; /* @author zsben @create 2020-01-03 13:48 创建三个窗口卖票,使用Runnable接口方式 1.问题:卖票过程中出现了重票,错票-->出现了线程安全问题 2.解决方案:当一个线程在操作ticket时,其他线程不能参与进来(即使该线程被阻塞) 直到该线程操作完ticket,其他线程才可以参与进来, 3.java中通过同步机制进行解决 方式一:同步代码块 synch

java基础——线程通信机制,生产者消费者

package communication; /* 使用两个线程1,2交替打印1-100 线程通信方法: 1.wait():一旦执行此方法,当前线程进入阻塞态,并释放锁 2.notify():会唤醒被wait的一个线程,如果有多个线程wait,则唤醒优先级高的 3.notifyAll():唤醒所有被wait的线程 说明: 1.wait(),notify(),notifyAll()使用在同步代码块或同步方法中,不能用在lock方法中 2.这三个方法的调用者必须是同步代码块或同步方法中的锁对象(同步

java基础——线程池

package threadpool; /* 创建线程的方式四:使用线程池 1.提供指定线程数量的线程池 2.执行指定的线程的操作,需要实现Runnable接口或Callable接口实现类的对象 3.关闭连接池 好处: 1.提高响应速度,减少了创建线程的时间 2.降低资源消耗(重复利用线程池中线程,不需要每次都创建) 3.便于线程管理,设置线程池 @author zsben @create 2020-01-05 17:05 */ import java.util.concurrent.Execu

Java基础—线程

1.什么叫线程 进程:进行中的程序 线程:轻量级的进程:程序里的顺序控制流,可以理解为程序里不同的执行路径   线程体为run()方法(直接调用run()视为普通方法),启动线程为start()方法 2.线程的五种状态  创建:两种方式 继承Thread类,重写run()方法:实现Runnable接口,实现run()方法 就绪:调用Thread的start()方法(第二种实现接口方式使用静态代理) 运行:得到时间片,开始运行 阻塞:遇到阻塞事件 终止:线程死亡,严禁使用stop()方法,而应该定

java基础——单例设计模式(懒汉式)

1 public class Test7 { 2 // 主函数 3 public static void main(String[] args) { 4 Test7.getInstance().function(9, 81); 5 } 6 7 // 私有成员变量 8 private String name; 9 private int age; 10 private static Test7 test7; 11 12 private Test7() { 13 } 14 15 public sta