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 2023-12-11 22:45  杨申龙  阅读(12)  评论(0)    收藏  举报