随笔 - 299  文章 - 0  评论 - 0  阅读 - 6322 
 Runnable

有两种方法可以创建一个新的执行线程:一种是将类声明为Thread。创建线程的另一种方法是声明一个实现Runnable接口的类。

//Thread源代码概略
//标记线程是否为守护线程。JVM进程中均为守护线程,如垃圾回收线程
public final void setDaemon(boolean on){};
//父子线程信息
private final ThreadGroup parent;
//初始化,新的线程的创建是由父线程创建的,main函数所在的线程是JVM创建
public Thread() {
init(null, null, "Thread-" + nextThreadNum(), 0);}
//启动,使用了本地调用,通过C代码初始化线程需要的系统资源
public synchronized void start() {};
//运行,执行start后处于可运行状态
//所以使用继承Thread创建线程类时,需要重写run方法,因为默认的run方法什么也不干。
public void run() {
if (target != null) {
//这里的target实际上要保存的是一个Runnable接口的实现的引用
//所以当我们使用Runnable接口实现线程类时,为了启动线程,需要先勇该线程类实例初始化一个Thread
target.run();
}
}
//此外还有wait,join,norify,sleep,yield等许多方法

Thread和Runnable的实质是继承关系,没有可比性。无论使用Runnable还是Thread,都会new Thread,然后执行run方法。用法上,如果有复杂的线程操作需求,那就选择继承Thread,如果只是简单的执行一个任务,那就实现runnable。

posted on   杨申龙  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示