Java 创建线程主要通过两种方式:继承 Thread 类和实现 Runnable 接口。这两种方法都是为了在 Java 应用程序中实现并发执行任务,但它们在灵活性和资源管理上有所不同。 **1. 继承 Thread 类** 当一个类直接继承自 Thread 类时,你需要重写它的 `run()` 方法。例如,在 `MutliThread` 类中,我们覆盖了 `run()` 方法来执行卖票的操作。创建线程时,直接实例化这个类并调用 `start()` 方法启动线程。这种方式的优点是直接与线程对象关联,无需额外的包装。然而,这种方式限制了类的继承性,因为 Java 只支持单继承,所以如果你的类需要继承其他类,就不能再直接继承 Thread 类。 ```java class MutliThread extends Thread { private int ticket = 100; // ... public void run() { // ... } } ``` **2. 实现 Runnable 接口** 如果不想因为继承 Thread 类而失去继承其他类的能力,可以选择实现 Runnable 接口。你需要实现 `Runnable` 接口中的 `run()` 方法,然后将 Runnable 对象作为参数传递给 Thread 类的构造函数。这种方式允许类继承其他类,增加了代码的灵活性。在 `MutliThreadDemo2` 示例中,我们创建了三个线程对象,每个对象持有同一个 Runnable 实例: ```java class MutliThread implements Runnable { private int ticket = 100; // ... public void run() { // ... } } // 主类 public class MutliThreadDemo2 { public static void main(String[] args) { MutliThread mt = new MutliThread(); Thread t1 = new Thread(mt); Thread t2 = new Thread(mt); Thread t3 = new Thread(mt); // ... } } ``` 这种方式的优点在于,多个线程可以共享同一个 Runnable 实例,从而实现资源共享。在卖票的例子中,所有线程共享同一票池,这在多线程协作中非常有用。 **两者对比** - **灵活性**:实现 Runnable 接口更灵活,因为可以继承其他类。 - **资源共享**:实现 Runnable 接口时,线程可以共享同一个 Runnalbe 实例,有利于资源管理。 - **代码耦合**:继承 Thread 类将业务逻辑与线程逻辑耦合在一起,而实现 Runnable 接口则可以分离这两部分,提高代码的可读性和可维护性。 选择哪种方式取决于具体需求。如果需要继承其他类,或者希望多个线程共享数据,那么实现 Runnable 接口可能是更好的选择。如果对继承没有特别需求,且线程有自己的独立资源,继承 Thread 类也是可行的。在实际开发中,通常推荐使用实现 Runnable 接口的方式来创建线程,因为它提供了更大的设计自由度和更好的代码组织结构。
- 粉丝: 12
- 资源: 904
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助