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

     

  • 相关阅读:
    使用dom4j 解析xml
    xml schema 建立xml文档
    xml dtd 约束建立xml文档
    DBCP 连接池的使用
    c++面向过程和面向对象-C++编译器是如何管理类和对象的
    c++读取文本文件
    一个范围的两个数进行数位的累加,实现对两个数num1和num2的数位和相加
    C++批量注释代码段取消注释代码段快捷键
    利用MATLAB截取一张复杂图片中想要的区域
    python学习之路系列
  • 原文地址:https://www.cnblogs.com/ptxxc/p/12254040.html
Copyright © 2011-2022 走看看