Synchronized 4种用法

Synchronized 4种用法:

同步静态方法(Synchronized Static Method):

public class MyClass {
    private static int counter = 0;

    public static synchronized void synchronizedStaticMethod() {
        // 同步静态方法体
        counter++;
        System.out.println("在 synchronizedStaticMethod 方法中,计数器值为:" + counter);
    }
}

在这个示例中,synchronizedStaticMethod 方法被声明为静态方法,并且使用了 synchronized 关键字。这样做的作用是确保在整个应用程序中,每次只有一个线程可以调用 synchronizedStaticMethod 方法。这对于确保静态方法中的操作是线程安全的很有用,例如在多个线程同时对静态变量进行递增操作时。

同步类(Synchronized Class)

public class MyClass {
    private static int counter = 0;

    public void someMethod() {
        synchronized (MyClass.class) {
            // 同步类的代码块
            counter++;
            System.out.println("在 synchronized 类块中,计数器值为:" + counter);
        }
    }
}

在这个示例中,someMethod 方法包含一个同步代码块,它使用了 MyClass.class 作为锁。这样做的作用是确保在整个 MyClass 类中,每次只有一个线程可以执行同步代码块中的操作。这对于确保对类级别的共享资源的安全访问很有用。

同步 this 实例(Synchronized This Instance):

public class MyClass {
    private int counter = 0;

    public synchronized void synchronizedThisMethod() {
        // 同步 this 实例方法体
        counter++;
        System.out.println("在 synchronizedThisMethod 方法中,计数器值为:" + counter);
    }
}

同步对象实例(Synchronized Object Instance)

public class MyClass {
    private int counter = 0;
    private final Object lockObject = new Object();

    public void someMethod() {
        synchronized (lockObject) {
            // 同步对象实例的代码块
            counter++;
            System.out.println("在 synchronized 对象块中,计数器值为:" + counter);
        }
    }
}

在这个示例中,someMethod 方法包含一个同步代码块,它使用了 lockObject 作为锁。这样做的作用是确保在每个 MyClass 类的实例中,每次只有一个线程可以执行同步代码块中的操作。这对于确保对实例级别的共享资源的安全访问很有用,同时也允许不同实例间的并发执行。

总的来说,使用 synchronized 关键字可以确保在多线程环境中对共享资源的安全访问,避免了竞态条件和数据不一致性的问题。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值