Class.this 和 this 的有什么不同

本文详细解释了Java编程中内部类使用Class.this的情况,特别关注于内部类如何引用并操作外部类的实例。通过具体示例,深入探讨了内部类与外部类之间的实例交互方式。

转自:http://blog.sina.com.cn/s/blog_7fa2bcf501010vz8.html

在阅读Java代码的時候

我们有时会看到Class.this的使用

这个用法多用于在 nested class(内部类)中

当inner class(内部类)必顺使用到outer class(外部类)的this instance(实例)时

例:

class Outer{
    String data "外部类別";

    public class Inner{
        String data "內部类別";
        public String getOuterData(){
            return Outer.this.data;
        }
    }
}

在 Java 中,`synchronized` 关键字在使用时传递 `this` `.class` 作为参数存在明显区别,主要体现在锁的对象作用范围上。 ### 锁的对象 - **`synchronized(this)`**:这里的 `this` 代表当前实例对象。当使用 `synchronized(this)` 时,锁住的是调用该同步代码块的实例对象。不同的实例对象拥有各自独立的锁,因此不同实例调用包含 `synchronized(this)` 的代码块时,不会相互阻塞。示例代码如下: ```java public class ThisLockExample { public void method() { synchronized (this) { // 同步代码块 } } } ``` - **`synchronized(类名.class)`**:`.class` 代表类的 `Class` 对象,它是类在 JVM 中的唯一表示。无论创建多少个该类的实例,类的 `Class` 对象只有一个。所以,`synchronized(类名.class)` 锁住的是类的 `Class` 对象,所有该类的实例在调用包含 `synchronized(类名.class)` 的代码块时,会共享同一把锁,会相互阻塞。示例代码如下: ```java public class ClassLockExample { public void method() { synchronized (ClassLockExample.class) { // 同步代码块 } } } ``` ### 作用范围 - **`synchronized(this)`**:作用范围局限于当前实例。同一时间内,只有一个线程可以进入该实例的 `synchronized(this)` 代码块。不同实例之间的同步代码块可以同时执行,互不干扰。若传递给线程的实例各不相同,同步代码块之间互不干扰,就没有同步的作用 [^2]。 - **`synchronized(类名.class)`**:作用范围是整个类。同一时间内,只有一个线程可以进入该类任意实例的 `synchronized(类名.class)` 代码块。 ### 适用场景 - **`synchronized(this)`**:适用于需要对单个实例的操作进行同步的场景,确保同一实例的某些操作在同一时间只能被一个线程执行。 - **`synchronized(类名.class)`**:适用于需要对类的所有实例的操作进行全局同步的场景,确保整个类的某些操作在同一时间只能被一个线程执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值