Java面试精华:深入理解线程与Runnable接口

需积分: 9 1 下载量 45 浏览量 更新于2024-09-12 收藏 73KB DOC 举报
Java多线程面试题是Java开发者经常被问到的话题,它涉及到对并发编程的理解和实践能力。下面详细解析了面试中常见的两个关键知识点: 1. 定义线程: - Java中的线程有两种实现方式: a) **扩展Thread类**:通过继承Thread类并重写`run()`方法来创建线程。`run()`方法是线程的主要执行入口,如果线程是通过Runnable实例化,那么这个方法会调用Runnable对象的`run()`方法。需要注意的是,如果线程是直接创建自Thread类,`run()`方法通常不执行任何操作。 b) **实现Runnable接口**:另一种创建线程的方式是实现Runnable接口,然后将实现类传给Thread的构造函数。这样创建的线程同样会调用Runnable的`run()`方法。Runnable接口提供了一种更灵活的方式来定义线程行为,因为一个类可以同时实现多个接口。 2. 实例化和启动线程: - **实例化线程**: - 如果使用Thread类创建线程,可以直接new一个Thread对象。 - 如果使用Runnable接口,可以通过Thread的构造器传入Runnable实例,如`Thread(Runnable target)`,还可以指定线程名称和堆栈大小。 - **启动线程**:至关重要的一步是调用Thread对象的`start()`方法,而不是`run()`。`start()`方法会执行以下步骤: - 将线程从新建状态转变为可运行状态。 - 创建一个新的执行上下文(调用栈),并将线程放入线程池中等待调度。 - 当线程获得CPU执行权时,它会执行Runnable的`run()`方法,执行实际的业务逻辑。 - **注意事项**:虽然`run()`方法在Runnable和Thread类中都可以调用,但它本身并不启动线程。只有当调用`start()`方法时,线程才会被创建并开始执行。 举例来说,创建一个实现了Runnable接口的简单线程类,如`DoSome`,代码可能如下: ```java public class DoSome implements Runnable { // ... public void run() { // 在这里编写线程执行的具体操作 } public static void main(String[] args) { Thread thread = new Thread(new DoSome(), "MyThread"); // 使用Runnable和名字创建线程 thread.start(); // 启动线程 } } ``` 理解这些概念对于Java开发者来说至关重要,它们涉及到线程生命周期管理、并发控制和资源同步等方面的基础知识,也是面试官评估候选人多线程编程能力和经验的重要依据。