Java中创建线程

在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。这两种方式各有特点,适用于不同的场景。下面将详细阐述这两种方式及其区别。

一、继承Thread

1. 基本步骤

通过继承Thread类来创建线程是最基本的一种方式。具体步骤如下:

  • 定义Thread的子类:通过继承java.lang.Thread类来定义一个子类。
  • 重写run方法:在子类中重写Thread类的run方法,这个run方法的方法体就代表了线程需要执行的任务。
  • 创建线程对象:通过new关键字创建子类的实例,这个实例就是线程对象。
  • 启动线程:调用线程对象的start方法来启动线程,start方法会调用run方法,但并不会直接执行run方法中的代码,而是让线程去执行。

示例代码

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程运行中...");
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 启动线程
    }
}

2. 优缺点

优点

  • 实现简单,容易理解,特别是对于初学者来说,这种方式比较直观。

缺点

  • Java不支持多重继承,因此如果继承了Thread类,那么这个类就不能再继承其他的类了。这在一些需要继承其他类以获取特定功能的场景中会受到限制。
  • 线程类只是代表了线程需要执行的任务,但是线程和任务的执行代码耦合在一起,不利于代码的复用。

二、实现Runnable接口

1. 基本步骤

通过实现Runnable接口来创建线程是另一种常用的方式。具体步骤如下:

  • 定义Runnable接口的实现类:实现java.lang.Runnable接口,并重写其run方法。
  • 创建Runnable实现类的实例:通过new关键字创建Runnable实现类的实例。
  • 创建Thread对象并传入Runnable实例:将Runnable实现类的实例作为构造参数传递给Thread类的构造方法,从而创建Thread对象。
  • 启动线程:调用Thread对象的start方法来启动线程。

示例代码

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("线程运行中...");
    }

    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start(); // 启动线程
    }
}

2. 优缺点

优点

  • 实现了Runnable接口的类还可以继承其他的类,这解决了Java单继承的限制。
  • 任务和线程的分离使得代码更加灵活,Runnable接口的实现类可以代表一个任务,而线程对象则用于执行这个任务,这样有利于代码的复用。
  • 在多线程环境下,多个线程可以共享同一个Runnable实现类的实例,这有利于线程间的通信和资源共享。

缺点

  • 相对于继承Thread类来说,实现Runnable接口的方式稍微复杂一些,需要多创建一个Thread对象。

三、两种方式的区别

继承Thread实现Runnable接口
基本思想通过扩展Thread类来创建线程通过实现Runnable接口来创建线程
继承/实现继承Thread实现Runnable接口
构造器使用Thread类的构造器使用Thread类的构造器,但构造器参数是Runnable接口的实现类实例
代码复用线程和任务代码耦合在一起,复用性较差线程和任务分离,复用性较好
Java单继承限制继承Thread类后不能再继承其他类实现了Runnable接口的类还可以继承其他类
资源共享多个线程不能共享同一个Thread类的实例(因为实例代表线程本身)多个线程可以共享同一个Runnable接口的实现类实例,有利于线程间的通信和资源共享
使用场景简单场景,不需要继承其他类时需要继承其他类,或者需要更高的代码复用性和灵活性
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值