• 初识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还可作用于一个类,用法如下

     

  • 相关阅读:
    easyUI日期框,默认显示今天,今天以后的日期不能选
    vue实现下拉框全选和输入匹配
    【转载】CSS flex属性深入理解
    ES6学习之二
    Centos7(Firewall)防火墙命令
    DeDeCMS模板标签(2)
    DeDeCMS模板标签(1)
    常用js正则表达式大全
    linux yum 命令
    Linux软链接和硬链接
  • 原文地址:https://www.cnblogs.com/ptxxc/p/12254040.html
Copyright © 2020-2023  润新知