zoukankan      html  css  js  c++  java
  • static synchronized与synchronized

    区别

    synchronized关键字
    synchronized作用是对类的当前实例(对象)加锁。可以使用synchronized关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时,这个线程便获得了该对象的锁,其他线程暂时无法访问这个方法,只有等待这个方法执行完毕或者代码块执行完毕,这个线程才会释放该对象的锁(Java 并发编程)。

    synchronized代码块【synchronized(synObject)】使用起来比synchronized方法要灵活得多。因为也许一个方法中只有一部分代码只需要同步,如果此时对整个方法用synchronized进行同步,会影响程序执行效率。而使用synchronized代码块就可以避免这个问题(同步对象或类属性),synchronized代码块可以实现只对需要同步的地方进行同步。

    与Lock的区别:

    1. synchronized是Java语言的关键字,因此是内置特性,Lock是一个类(java.util.concurrent.locks包),通过这个类可以实现同步访问;
    2. synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用。Lock则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象。

    static synchronized:
    每个类有一个锁,它可以用来控制对static数据成员的并发访问。访问static synchronized方法占用的是类锁,而访问非static synchronized方法占用的是对象锁。

    static synchronized控制类的所有实例(对象)的访问(相应代码块)。synchronized相当于 this.synchronized,static synchronized相当于Something.synchronized

    代码解析:

    package com.xianggen.concurrent;
    /**

    • static synchronized 和synchronized的区别!

    • 关键是区别第四种情况!

    • */

    • public class StaticSynchronized {

      /**

      • synchronized方法
        */
        public synchronized void isSynA(){
        System.out.println(“isSynA”);
        }
        public synchronized void isSynB(){
        System.out.println(“isSynB”);
        }

      /**

      • static synchronized方法
        */
        public static synchronized void cSynA(){
        System.out.println(“cSynA”);
        }
        public static synchronized void cSynB(){
        System.out.println(“cSynB”);
        }

      public static void main(String[] args) {
      StaticSynchronized x=new StaticSynchronized();
      StaticSynchronized y=new StaticSynchronized();
      /**
      * x.isSynA()与x.isSynB() :不能同时访问(同一个对象访问synchronized方法)
      * x.isSynA()与y.isSynB() :能同时访问(不同对象访问synchronized方法)
      * x.cSynA()与y.cSynB() :不能同时访问(不同对象也不能访问static synchronized方法)
      * x.isSynA()与y.cSynA() :能同时访问(static synchronized方法占用的是类锁,而访问
      * synchronized方法占用的是对象锁,不存在互斥现象)
      */
      }

  • 相关阅读:
    【SCOI 2011】 糖果
    【POJ 3159】 Candies
    【POJ 1716】 Integer Intervals
    【POJ 2983】 Is the information reliable?
    【POJ 1364】 King
    【POJ 1201】 Intervals
    【POJ 1804】 Brainman
    6月10日省中提高组题解
    【POJ 3352】 Road Construction
    【POJ 1144】 Network
  • 原文地址:https://www.cnblogs.com/cyy489/p/13286068.html
Copyright © 2011-2022 走看看