Thread 和Runnable的区别和联系

Thread 和Runnable 关系

Thread类是接口Runnable的一个实现类。
调用start()方法,实际运行的是start0方法,方法声明如下:
private native void start0()
native表明这个方法是个原生函数,即这个函数是用C/C++实现的,被编译成DLL,由Java调用。
native 方法是在注册是在Thread对象初始化完成的,如图,静态块static里有个registerNatives方法,该方法会注册一些本地方法供Thread类使用。
start0方法会在JVM 新建一个线程

Runnable Runnable 接口只有一个run()方法,完全是线程运行规范。
总结:

使用选择

实现Runnable接口的同时,还可以继承其他类,避免Java的单继承性带来局限性。
Runnable接口可以实现资源共享,Thread无法完成资源共享。

main方法其实也是一个线程。在java中所以的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源。

start()方法的调用后并不是立即执行多线程代码,而是使得该线程变为可运行态(Runnable),什么时候运行是由操作系统决定的。
从程序运行的结果可以发现,多线程程序是乱序执行。因此,只有乱序执行的代码才有必要设计为多线程。
Thread.sleep()方法调用目的是不让当前线程独自霸占该进程所获取的CPU资源,以留出一定时间给其他线程执行的机会。
实际上所有的多线程代码执行顺序都是不确定的,每次执行的结果都是随机的。

在启动的多线程的时候,需要先通过Thread类的构造方法Thread(Runnable target) 构造出对象,然后调用Thread对象的start()方法来运行多线程代码。

你可能感兴趣的:(Thread 和Runnable的区别和联系)