美文网首页
给静态方法加锁锁的是类

给静态方法加锁锁的是类

作者: 综合楼 | 来源:发表于2020-11-08 15:51 被阅读0次

给静态方法加锁

public class Test {
    synchronized static void fun1() throws InterruptedException {
        System.out.println("加锁的方法1开始执行");
        Thread.sleep(2000);
        System.out.println("加锁的方法1执行结束");
    }

    synchronized static void fun2() throws InterruptedException {
        System.out.println("加锁的方法2开始执行");
        Thread.sleep(2000);
        System.out.println("加锁的方法2执行结束");
    }

    public static void main(String[] args) {
        Test obj1 = new Test();
        Test obj2 = new Test();

        new Thread(() -> {
            try {
                obj1.fun1();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            try {
                obj2.fun2();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

效果

image.png

给普通方法加锁

public class Test {
    synchronized void fun1() throws InterruptedException {
        System.out.println("加锁的方法1开始执行");
        Thread.sleep(2000);
        System.out.println("加锁的方法1执行结束");
    }

    synchronized void fun2() throws InterruptedException {
        System.out.println("加锁的方法2开始执行");
        Thread.sleep(2000);
        System.out.println("加锁的方法2执行结束");
    }

    public static void main(String[] args) {
        Test obj1 = new Test();
        Test obj2 = new Test();

        new Thread(() -> {
            try {
                obj1.fun1();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            try {
                obj2.fun2();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

效果:

image.png

相关文章

  • java类锁和对象锁

    java对象锁有两种:对象锁、类锁。 对象锁:在非静态方法上加锁。声明了一个对象锁。类锁:在静态方法上加锁,声明了...

  • 给静态方法加锁锁的是类

    给静态方法加锁 效果: 给普通方法加锁 效果:

  • 类锁、对象锁使用实战

    前提,synchronized 加到 static 方法前面是给class 加锁,即类锁;而synchronize...

  • synchronized关键字最主要的三种使用方式

    修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁 修饰静态方法,作用于当前类对象加锁,进...

  • synchronized :同步锁

    synchronized 同步锁分为对象锁、类锁、静态方法锁、非静态方法锁等。其中对象锁和非静态方法锁的作用域是对...

  • synchronized的使用场景

    synchronized的使用场景可以归结为3种:① 修饰静态方法,给当前类对象加锁,进入同步方法时需要获得类对象...

  • Java基础-线程-锁

    锁的表示 Java里的锁,主要都是对对象进行加锁,如普通的synchronized非静态方法,就是对当前执行方法的...

  • Java多线程方法锁机制

    本文主要介绍在多线程中对于普通方法和静态方法加锁调用产生的情况。结论: (1)非静态方法锁默认为this也就是作用...

  • synchronized 关键字里的锁

    synchronized 关键字的锁有静态态方法锁,锁是所在类的class文件,非静态方法里代码块的synchr...

  • synchronized修饰静态方法和非静态方法

    修饰静态方法,锁是加在类上的,类的所有对象竞争一把锁;修饰非静态方法,锁加在单个对象上,不同对象间没有竞争关系。

网友评论

      本文标题:给静态方法加锁锁的是类

      本文链接:https://www.haomeiwen.com/subject/znjhbktx.html