zoukankan      html  css  js  c++  java
  • synchronized关键字

    参考链接:https://blog.csdn.net/weiyongxuan/article/details/46493803

    https://blog.csdn.net/qq_34902522/article/details/76262812先来了解几个定义:

    临界区:Critical Section

    临界区是一个用以访问共享资源的代码块,这个代码块在同一时间内只允许一个线程执行。

    同步:

    1、当一个线程试图访问一个临界资源时,它将使用一种同步机制来查看是不是已经有其他的线程进入临界区。

    2、如果临界区没有其他的线程,他就可以进入临界区。如果已经有线程进入临界区,它就被同步机制挂起,直到进入的线程离开临界区。

    3、如果在等待临界区的线程不只一个,jvm就会选择其中一个,其他的继续等待。

    java采用两种基本的同步机制:

    一种是:synchronized关键字机制

    另一种是:lock接口及其实现

    synchronize关键字机制

    synchronize修饰方法

    1、使用synchronize关键字的方法性能比较低

    2、每一个使用synchronize修饰的方法都是临界区

    3、使用synchronize修饰的对象,那么同一时间只能有一个执行线程访问,如果其他线程试图访问这个对象的其他方法,都将被挂起

    4、synchronize修饰静态方法会怎么样?

    使用synchronize修饰的静态方法,那么同一时间只能有一个执行线程访问,但是其他线程可以访问这个对象的非静态方法。

    synchronize修饰代码块

    1、方法的其余部分保持在synchronize代码块之外,以获取更好的性能

    2、synchronized修饰代码块的参数是当前对象,注意是对象,不是类  

    1、java中每个对象都有同步锁,同步方法是指进入该方法时需要获取this对象的同步锁,而同步代码块则是可以指定需要获取哪个对象的同步锁

    2、无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――同步方法很可能还会被其他线程的对象访问

  • 相关阅读:
    「SDOI2018」物理实验
    「SDOI 2018」战略游戏
    「CodeChef Dec13 REALSET」 Petya and Sequence 循环卷积
    关于微信卡券投放code接口报错原因
    composer update maatwebsite/excel 之后 在linux机子上出现500解决方案
    开启mysql 服务【window】
    thinkphp在linux上部署环境(500情况)
    如何推广微信小程序到企业微信
    linux 阿里云远程连接mysql
    php7以上 不支持mcrypt_module_open方法问题【微信开放平台】
  • 原文地址:https://www.cnblogs.com/yingpu/p/9318856.html
Copyright © 2011-2022 走看看