持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情
为了活动小家电,接着上篇搞!
什么是线程?
-
根据官方文档,java.lang.Thread是指在程序中执行的线程,在JVM的支持下,它是一个进程的组件,可以同时执行多个线程。
线程是程序中的执行线程。Java 虚拟机允许应用程序同时运行多个执行线程。
-
线程有时被描述为进程中的一个工作单元。
Thread 对象是如何创建的?
- 根据上图,在Thread类的几个构造函数中,为了帮助理解,将根据有无Runnable参数将构造函数分成两部分来看。
-
第一种方法是使用默认构造函数 Thread() 构造函数创建一个线程。它通过在内部覆盖 run() 来使用。
-
第二种方法是使用 Thread(Runnable runnable) 构造函数创建一个线程。另外,应该创建和交付实现 Runnable 接口的对象。
- 根据官方文档,实现Runnable接口的类应该定义为run()。换句话说,最好理解 Runnable 对象是一个具有 run() 内容的对象。 该
Runnable
接口应由其实例旨在由线程执行的任何类实现。该类必须定义一个没有参数的方法,称为run
.作为参数传递的可运行对象在线程运行时使用。也就是说,当调用线程的 start() 时,会调用 runnable 的 run()。
- 根据官方文档,实现Runnable接口的类应该定义为run()。换句话说,最好理解 Runnable 对象是一个具有 run() 内容的对象。 该
Thread 对象是如何执行的?
-
当 run() 在 Thread 中被覆盖时(第一种方法)
-
当 start() 函数被执行时,线程的 run() 被 JVM 调用。
使该线程开始执行;Java 虚拟机调用
run
该线程的方法。- Thread.start() -> Thread.run()
-
new thread().start();
-
结果,两个线程同时运行。
- 当前线程:一个 Thread 对象,它是 start() 的返回值
- 另一个线程:执行上述线程的 run() 的另一个 Thread 对象
-
-
使用 Runnable 时(第二种方式)
-
Thread 的 run() 内部调用 Runnable 的 run()。
- Thread.start() -> Thread.run() -> Runnable.run()
-
new Thread(Runnable).start();
如果该线程是使用单独的
Runnable
运行对象构造的,则调用该Runnable
对象的run
方法;否则,此方法不执行任何操作并返回。Runnable
:启动此线程时调用其run
方法的对象。如果null
,这个类run
方法什么也不做。 -
如何定义和使用线程?
-
有两种方法可以直接定义和使用线程,具体取决于哪一种成为父级。
-
如何继承和定义Thread类
-
class TestThread extends Thread {}
-
-
如何通过实现Runnable接口来定义
-
class TestRun implements Runnable {}
通过实例化一个实例并将自身作为目标传入,实现的类
Runnable
可以在没有子类化的情况下运行。
-
-