zoukankan      html  css  js  c++  java
  • synchronized 修饰在 static方法和非static方法的区别

      Java中synchronized用在静态方法和非静态方法上面的区别

      在Java中,synchronized是用来表示同步的,我们可以synchronized来修饰一个方法。也可以synchronized来修饰方法里面的一个语句块。那么,在static方法和非static方法前面加synchronized到底有什么不同呢?大家都知道,static的方法属于类方法,它属于这个Class(注意:这里的Class不是指Class的某个具体对象),那么static获取到的锁,是属于类的锁。而非static方法获取到的锁,是属于当前对象的锁。所以,他们之间不会产生互斥。

      看代码:

    public class Demo {
    	public static synchronized void staticFunction()
    			throws InterruptedException {
    		for (int i = 0; i < 3; i++) {
    			Thread.sleep(1000);
    			System.out.println("Static function running...");
    		}
    	}
    
    	public synchronized void function() throws InterruptedException {
    		for (int i = 0; i <3; i++) {
    			Thread.sleep(1000);
    			System.out.println("function running...");
    		}
    	}
    
    	public static void main(String[] args) {
    		final Demo demo = new Demo();
    		Thread thread1 = new Thread(new Runnable() {
    			@Override
    			public void run() {
    				try {
    					staticFunction();
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    		});
    
    		Thread thread2 = new Thread(new Runnable() {
    			@Override
    			public void run() {
    				try {
    					demo.function();
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    		});
    
    		thread1.start();
    		thread2.start();
    	}
    }
    

      运行结果是:

    function running...
    Static function running...
    function running...
    Static function running...
    function running...
    Static function running...
    

      那当我们想让所有这个类下面的方法都同步的时候,也就是让所有这个类下面的静态方法和非静态方法共用同一把锁的时候,我们如何办呢?此时我们可以使用Lock。

  • 相关阅读:
    jQuery on注册事件
    前端表格(Table)多条数据可以增加行删除行json封装后Post数据到后台处理
    导出Excel数据
    C#在一个实体类上新加字段并把另外一个实体类的字段值赋给它
    函数(五)-内置函数
    函数(四)-命名空间与作用域
    函数(三)-return与函数的调用
    函数(二)- 参数
    函数(一)-基本格式
    字符串格式化
  • 原文地址:https://www.cnblogs.com/wxgblogs/p/5505368.html
Copyright © 2011-2022 走看看