java只有一种创建Thread的方式!

本文探讨了在Java中创建线程的两种常见方法:实现Runnable接口和继承Thread类。这两种方式本质上都是通过构造Thread对象并覆盖run方法来实现。线程池和Callable接口虽然提供了不同的线程执行方式,但核心仍然是基于Thread。对于创建线程的理解,可以从操作系统层面和Java层面两个维度来看。无论是哪种方式,关键在于实现线程的运行内容。
摘要由CSDN通过智能技术生成

在java中有很多方式创建线程,比较被广泛接收的是两种方式的说法:

package com.jswdwsx;

public class ThreadStudy {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new MyTask());
        thread1.start();

        Thread thread2 = new MyThread();
        thread2.start();
    }
}

class MyTask implements Runnable {
    @Override
    public void run() {
        System.out.println("方式一 实现Runnable接口!");
    }
}

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("方式二 继承Thread类!");
    }
}
  • 方式一:实现Runnable接口,将该实现类的对象作为参数,传递给Thread构造方法,构造Thread对象
  • 方式二:继承Thread类,重写run方法,构造这个Thread子类的对象

可以看到本质上都是构造一个Thread类,我们不妨回到问题:如何创建一个线程?
这个问题我们可以看得更深入一点:
这里如果理解为创建一个操作系统层面执行的线程,那么调用Thread类对象的start方法就可以创建一个线程。
如果是理解为java层面创建一个线程,那么可以看到我们上面的两种方式都是构造一个Thread对象(子类也是一个Thread)。


至于我们常常说到的两种方式,其实是两种实现线程运行内容的方式。
通过代码可以发现,实现Runnable接口和继承Thread类,都是为了override(实现/重写) run方法。
所以说,创建线程只有一种方式,就是构造Thread类


至于其他方式

  • 线程池
    本质是用线程工厂创建线程,线程工厂还是使用new Thread(参数省略)方法来创建
  • 有返回值的 Callable 创建线程
    和实现Runnable接口一样,这只是实现线程运行内容的方式。Callable如何被执行,请看这篇文章
  • 定时器 Timer
    Timer类中有一个TimerThread成员变量,TimerThread依然继承自Thread
  • 匿名类和lambda表达式
    都是实现Runnable接口的不同写法而已
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值