当前位置: 首页 > news >正文

Java 不同创建线程的方式什么时候才可以使用 this 来获取线程的引用

1.匿名内部类可以使用 this 来获取当前线程的引用

这里能使用 this 的原因与匿名内部类的继承机制有关。

public static void main(String[] args) {Thread t = new Thread() {  // 🔥 关键在这里@Overridepublic void run() {System.out.println(this.getName());           // 输出匿名类线程名System.out.println(Thread.currentThread().getName());  // 输出实际执行线程名}};t.start();
}

这段代码 new Thread () { ... } 的实际含义是:

/ 等价于创建了一个 Thread 的匿名子类
class AnonymousThread extends Thread {  // 编译器生成的匿名类@Overridepublic void run() {System.out.println(this.getName());  // this 指向 AnonymousThread 实例System.out.println(Thread.currentThread().getName());}
}Thread t = new AnonymousThread();  // 创建匿名子类的实例

this 的指向规则

在匿名内部类中, this 的指向遵循以下规则:

匿名类的类型层次

因为匿名类继承了 Thread 类,所有它具有 Thread 的所有方法,包括 getName().

2.实现 Runnale ,不能用 this 来获取线程信息

Thread t = new Thread(new Runnable() {@Overridepublic void run() {// ❌ this 指向 Runnable 匿名实现类,不是 Thread// System.out.println(this.getName());  // 编译错误!// ✅ 必须用 Thread.currentThread()System.out.println(Thread.currentThread().getName());}
});

等价于

class AnonymousRunnable implements Runnable {  // 实现 Runnable@Overridepublic void run() {// this 指向 AnonymousRunnable 实例,它只是 Runnable,不是 Thread// this.getName() 不存在!System.out.println(Thread.currentThread().getName());}
}
Thread t = new Thread(new AnonymousRunnable());

类型关系图解

运行时有两个独立对象

  • runnableTask:Runnable 接口的实现对象
  • t : Thread 线程对象

所以需要 Thread.currentThread()来获取当前正在执行代码的线程对象。

3. lambda 表达式也不可以,因为 lambda 表达式中的 this 指向外部类实例是有 lambda 的设计哲学和实现机制来决定的。

http://www.dtcms.com/a/597141.html

相关文章:

  • 兰州做网站的公司wordpress标签云美化
  • MATLAB基于PSO-GA的铁路工程施工进度计划多目标优化研究
  • JavaScript的BOM学习笔记——1、浏览器对象模型
  • python将Excel数据写进图片中
  • 五金配件网站建设报价圣弓 网站建设
  • Django中如何重写save()方法
  • C在线编程 | 提升编程技能,掌握C语言的核心要点
  • 京东这样的网站怎么做网站建设费用怎么算
  • django模型数据查询
  • 佛山骏域网站建设软件开发价格标准
  • discuz企业网站一诺摄影设计
  • 基于微信小程序的特色农产品交易系统
  • 【windows常见问题】pin不可用,无法登录Windows
  • 免费正能量励志网站网站登陆界面怎么做
  • 网站建设找丿金手指排名在iis上部署的网站本机无法浏览解决方法
  • 【Android Studio】解决4K电视机上,网页无法适配的问题
  • 如何选择适合自动化的测试用例?
  • 一步一步网站建设教程联通 网站备案
  • 著名心理学导师钧岚确认出席2025厦门IP+AI万人峰会​
  • 10.游戏逆向-pxxx-UObjectBase成员解密
  • 触发器,存储过程
  • 计算点到三次 Bézier 曲线最短距离及对应参数 u 的方法(转化为五次多项式)
  • npm中-d -g 和默认安装的区别
  • 深圳商城网站建设报价单青岛网站建设的方案
  • AI 编程工具全景分析与 Claude Code 配置 MiniMax - m2 模型指南​
  • MES 生产调度模块:业务逻辑、功能细节与全场景落地
  • PG认证培训考试中心-CUUG【工信人才授权指定】
  • 研究院 网站建设云主机怎么装网站
  • 微网站模板代码电子商务实网站的建设课件
  • 55_AI智能体运维部署之实战经验:编写生产级Dockerfile的深度思考