1.基础:线程的创建、启动与运行

本文详细介绍了在Java中创建线程的两种主要方法:通过继承Thread类和实现Runnable接口。对比了这两种方法的优缺点,包括面向对象设计、对象共享和创建成本等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在Java 平台中创建一个线程就是创建一个Thread 类(或其子类)的实例。Thread 类的start 方法的作用是启动相应的线程。运行一个线程实际上就是让Java 虚拟机执行该线程的run 方法,从而使相应线程的任务处理逻辑代码得以执行。
Thread 类的两个常用构造器是:Thread() 和Thread(Runnable target) 。相应地, Java 语言中创建线程有两种方式。

1.以定义Thread 类子类的方式创建线程

public class WelcomeApp {

  public static void main(String[] args) {
    // 创建线程
    Thread welcomeThread = new WelcomeThread();

    // 启动线程
    welcomeThread.start();

    // 输出“当前线程”的线程名称
    System.out.printf("1.Welcome! I'm %s.%n", Thread.currentThread().getName());
  }
}

// 定义Thread类的子类
class WelcomeThread extends Thread {

  // 在该方法中实现线程的任务处理逻辑
  @Override
  public void run() {
    System.out.printf("2.Welcome! I'm %s.%n", Thread.currentThread().getName());
  }
}

2.以创建Runnable 接口实例的方式创建线程

public class WelcomeApp1 {

  public static void main(String[] args) {
    // 创建线程
    Thread welcomeThread = new Thread(new WelcomeTask());

    // 启动线程
    welcomeThread.start();
    // 输出“当前线程”的线程名称
    System.out.printf("1.Welcome! I'm %s.%n", Thread.currentThread().getName());

  }

}

class WelcomeTask implements Runnable {
  // 在该方法中实现线程的任务处理逻辑
  @Override
  public void run() {
    // 输出“当前线程”的线程名称
    System.out.printf("2.Welcome! I'm %s.%n", Thread.currentThread().getName());
  }

}

3.两种方式的区别

1.从面相对象编程的角度来看:第一种方式基于继承,第二种方式基于组合。后者类和类之间的耦合性更低,更加灵活,优先选用。
2.从对象共享的角度来看:笫2种创建方式意味着多个线程实例可以共享同一个Runnable 实例。
3.从对象创建成本的角度来看:Java 中的线程实例是一个“特殊”的Runnable 实例,因为在创建它的时候Java 虚拟机会为其分配调用栈空间、内核线程等资源。因此,创建一个线程实例比起创建一个普通的Runnable 实例未说,其成本要相对昂贵一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值