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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统