zoukankan      html  css  js  c++  java
  • java synchronized的一些知识

      synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的synchronized块,注意是“类的当前实例”,类的两个不同实例就没这种约束了。

           static synchronized是要控制类的所有实例的访问,static synchronized可以实现对类的多个实例的加锁功能。

          《java多线程设计模式》有这样的一个例子:

    public class Something{
        public synchronized void isSyncA(){}
        public synchronized void isSyncB(){}
        public static synchronized void cSyncA(){} 
        public static synchronized void cSyncB(){} 
    }

      那么,假如有Something的2个实例a和b,下面的那个选项是2个线程可以同时访问呢

    a. x.isSyncA()与x.isSyncB()
    b. x.isSyncA()与y.isSyncB()
    c. x.cSyncA()与y.cSyncB()
    d. x.isSyncA()与Something.cSyncA()

      可以有下面的判断:

      a. 都是对同一个实例的synchronized域访问,是同一个所对象,不能同时访问

      b. 针对的是不同的实例,不同的锁对象,可以同时访问

      c. static synchronized,不同实例仍会被限制,等同于Something.cSyncA()与Something.cSyncB(),不能同时访问

      d. 可以同时访问,synchronized的是实例方法与synchronized的类方法的锁的对象是不同的

      static方法可以被多线程同时访问的,只要没使用static成员变量就是线程安全的,常用于工具类。

           static synchronized无法被多线程同时访问,要注意性能上的问题。

  • 相关阅读:
    Python print() 函数
    Python issubclass() 函数
    Python execfile() 函数
    Python basestring() 函数
    QTP自动化测试-点滴-步骤
    qtp自动化测试-条件语句 if select case
    学习心态--笔记
    测试计划小记
    QTP自动化测试-笔记 注释、大小写
    win10 新建文件夹没有了
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/13550992.html
Copyright © 2011-2022 走看看