zoukankan      html  css  js  c++  java
  • Java中synchronized详解

    synchronized

    原则:

    1. 尽量避免无谓的同步控制,同步需要系统开销,可能造成死锁
    2. 尽量减少锁的粒度

    同步方法

    public synchronized void printVal(int v) 
     { 
      while(true) 
       System.out.println(v); 
     } 
    
    1. 同步方法锁的是对象。类中有一个同步方法,这个方法可以被两个不同的线程同时执行,只要每个线程自己创建一个的该类的实例即可。
    2. 要实现类的同步,两种方式:
      • 方法中添加synchronized(ClassName.class)类锁,无论多少个实例,此方法只有一个线程可以执行。
      • 添加静态成员private static Object lock=new Object();并锁住synchronized(lock)。
    3. 如果一个对象有多个synchronized方法,只有一个线程访问了其中一个同步方法,那么其他的同步方法也会被锁住。
    4. 静态同步方法对所有实例起作用,synchronized static aStaticMethod{}。
    5. 同步方法不可继承,需要显示指定是否为同步方法。

    同步块

    synchronized(this) //作用域是当前对象
        {/*区块*/}
    
    1. 作用于方法中的某个部分,表示此部分资源互斥访问。
    2. 一个线程访问同步块时,其他线程可以访问非synchronized(this)同步代码块。
    3. 当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。

    参考这里



    I am a slow walker, but I never walk backwards.



  • 相关阅读:
    svn笔记
    cakephpurl生成
    cakephp加载流程
    jquery validate使用方法
    我需要具备的知识和能力总结
    cakePHP国际化和本地化
    javascript片段收集
    ecmall一个典型的操作
    9. Technical Overview 技术概述
    42. Spring Security Dependencies春季安全依赖
  • 原文地址:https://www.cnblogs.com/lknny/p/5800260.html
Copyright © 2011-2022 走看看