多线程04--Runnable && Thread.start()底层剖析

本文详细探讨了Java中实现多线程的方式,通过Runnable接口和Thread.start()方法的底层剖析,揭示了启动线程的原理。首先,解释了Runnable与静态代理的相似性,然后分析了Thread类的构造方法和start()方法的工作过程,指出start()方法通过调用native方法start0()启动线程。同时,文章强调了为何不能使用Thread.run()启动新线程,以及start()方法中对线程状态的检查和异常处理。最后,简要提及了线程状态的变化和start0()方法的进一步探究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Runnable与静态代理的联系

前面《多线程03--静态代理模式》,我们通过一个简单的例子,然后外加配图,相信已经能够比较清楚的理解静态代理模式是个什么玩意儿,以及如何实现它。那么回到通过实现Runnable创建线程这个事儿上来,我们再列下整个实现步骤:

  1. 新建线程类MRunnableThread,继承Runnable接口,在其中实现run()方法完成具体的业务操作动作

  2. new一个MRunnableThread的实例mRunnable,调用new Thread(mRunnable).start()启动线程

上面的步骤2中的new Thread(mRunnable).start(),是不是和下面的这行代码有异曲同工之妙:

实际上,两者本质也确实一样,底层都使用了静态代理模式。

看new Thread的构造方法:

init方法主要做的事情就是初始化线程,方法体内部做的其中一个事情就是为target赋值:

那么这个target是哪儿来的呢,接着看:

target实际就是Runable的一个实例对象,上面的注释也比较有意思:What will be run(谁将会被执行)

我们再看一下,Thread的start方法:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值