• 静态同步synchronized方法和synchronized(class)代码块


    关键字synchronized还可以应用在static静态方法上,如果这样写,那是对当前的*.java文件对应的Class类进行持锁。

    package synStaticMethod;
    
    /**
     * Created by Administrator on 2017/1/22 0022.
     */
    public class Service {
        synchronized public  static  void printA(){
            try{
            System.out.println("线程名称为:"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"进入printA");
                Thread.sleep(3000);
                System.out.println("线程名称为:"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"离开printA");
    
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        synchronized public static  void printB(){
            System.out.println("线程名称为:"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"进入printB");
            System.out.println("线程名称为:"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"离开printB");
    
        }
    }
    package synStaticMethod;
    
    
    /**
     * Created by Administrator on 2017/1/22 0022.
     */
    public class ThreadA extends Thread{
        public void run(){
            Service.printA();
        }
    }
    package synStaticMethod;
    
    /**
     * Created by Administrator on 2017/1/22 0022.
     */
    public class ThreadB extends Thread {
        public void run(){
            Service.printB();
        }
    }
    package synStaticMethod;
    
    /**
     * Created by Administrator on 2017/1/22 0022.
     */
    public class Run {
        public static  void main(String[]args){
            ThreadA threadA =  new ThreadA();
            threadA.setName("A");
            threadA.start();
            ThreadB threadB = new ThreadB();
            threadB.setName("B");
            threadB.start();
        }
    }
    线程名称为:A在1485063366543进入printA
    线程名称为:A在1485063369543离开printA
    线程名称为:B在1485063369543进入printB
    线程名称为:B在1485063369543离开printB

    从结果来看,是同步的效果,和将synchronized关键字加到非静态方法上使用的效果是一样的,其实synchronized关键字加到static静态方法上是给Class类上锁,而synchronized关键字加到非static静态方法上是给对象加锁。

  • 相关阅读:
    OCS边缘服务器部署(包含ISA设置)
    RMS部署文档
    推荐软件:PowerShell Plus
    OCS排错工具和最佳实践
    在Exchange Server 2007中使用多主机名称证书
    OCS边缘服务器部署
    推荐软件:Quset PowerGUI
    ISA 2008(FOREFRONT TMG)安装体验
    gridview 删除确认
    标识列 在任意编号位置插入数据
  • 原文地址:https://www.cnblogs.com/dream-to-pku/p/6340250.html
Copyright © 2020-2023  润新知