• Synchronized的应用


    对线程加锁用的synchronized关键字,这个关键字的用法主要也分为两种:

    一种是加在方法名之前,形如:synchronized methodeName(params){……};

    二是声明同步块,形如:synchronized(this){……};

    很明显,加在方法名之前的范围比较大,而声明同步块范围要小点,一般同步的范围越大,性能就越差,一般需要加锁进行同步的时候,肯定是范围越小越好,这样性能更好*。

    一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 
    二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。 
    三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。

    class Singleton {
    	// 私有的构造函数,保证外类不能实例化本类
    	private Singleton() {
    	}
     
    	// 自己创建一个类的实例化
    	private static Singleton singleton;
     
    	// 创建一个get方法,返回一个实例s
    	public static Singleton getInstance(){
    		//判断singleton是否为null,如果为null,即判定需要实例化
    		if (singleton == null) {
    			singleton = new Singleton();
    		}
    		return singleton;
    	}
    }
    //单例模式懒汉模式,不加锁
    

      

    // 单例模式 - 懒汉式加锁-双重检查锁
    class Singleton {
    	private Singleton() {
    	}
     
    	private static Singleton singleton;
     
    	private static Singleton getInstance() {
    		if ( singleton == null) {
    			synchronized (Singleton.class) {
    				if ( singleton == null) {
    					 singleton = new Singleton();
    				}
    			}
    		}
    		return  singleton;
    	}
    }
    

      

  • 相关阅读:
    JS获取今天的日期
    领域模型vs数据模型,应该怎么用?
    如何让技术想法更容易被理解?
    如何做好技术 Team Leader
    回归分析中常见的“门槛模型”!
    有了数据湖,距离数据仓库消失还有几年?
    数据治理 VS 公司治理、IT治理、数仓治理
    Sentence-seven basic patterns 英语句子结构
    VM的Linux CentOS系统的VMTools的手动安装
    linux下IPTABLES配置详解
  • 原文地址:https://www.cnblogs.com/clc1996/p/12446907.html
Copyright © 2020-2023  润新知