zoukankan      html  css  js  c++  java
  • 初识synchronized

    什么是synchronized?

    synchronized关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、D等)正在用这个方法,若有则要等正在使用synchronized方法的线程B(或者C、D)运行完这个方法后再运行此线程A,若没有则直接运行。

    synchronized关键字理解

    javasynchronized用法

    使用了synchronized关键字可以轻松地解决多线程共享数据同步问题。

    synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量、object         reference(对象引用)、static函数和class literals(类名称字面常量)身上。 

    synchronized取得的锁都是对象;每个对象只有一个锁(lock)与之相关联;实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。

    synchronized的4种用法

    1.方法声明时使用,线程获得的是成员锁.

    2.对某一代码块使用,synchronized后跟括号,括号里是变量,线程获得的是成员锁.

    3.synchronized后面括号里是一对象,此时,线程获得的是对象锁.

    4.synchronized后面括号里是类,此时,线程获得的是对象锁

     

    修饰方法

    public synchronized void method(){   

    // todo

    }

    public void method(){

    synchronized(this) {

         // todo  

       }

    }

    修饰代码块

     

     test01的运行结果

     test02的运行结果

    修饰一个静态的方法

    Synchronized也可修饰一个静态方法,用法如下:

     public synchronized static void method() {

    // todo

    }

    静态方法是属于类的而不属于对象的。同样的,synchronized修饰的静态方法锁定的是这个类的所有对象。

    修饰一个类

    Synchronized还可作用于一个类,用法如下

     

  • 相关阅读:
    7、.net core 使用apollo
    6、初识Apollo
    5、supervisor安装使用
    Linux用户和用户组管理
    监督学习中的“生成模型”和“判别模型”
    Ubuntu 14.04 installation & bugs on Alienware-13
    Majority Element问题---Moore's voting算法
    redis之作为缓存的使用(二)
    redis之作为缓存的使用(五)缓存污染
    redis之作为缓存的使用(四)缓存击穿,雪崩,穿透
  • 原文地址:https://www.cnblogs.com/ptxxc/p/12254040.html
Copyright © 2011-2022 走看看