创建线程的方式

本文详细介绍了Java中创建线程的三种方法:继承Thread类、实现Runnable接口和实现Callable接口。虽然方式各异,但实质都是通过Thread启动线程。在实际开发中,为有效管理线程资源,通常会使用线程池。文中还强调了run()和start()的区别,run()直接调用不会开启新线程,而start()则会启动新线程并执行run()。

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

创建线程的三种方式

Java中主要有三种实现多线程的方式:

  1. 继承Thread
  2. 实现Runnable接口
  3. 实现Callable接口(可以获取线程执行后的返回值)

第一种方式是创建了一个继承于Thread的多线程类,它本身就是一个线程;而后两种方式更准确的理解是创建了一个可执行的任务,要采用多线程的方式执行,即两种方式还是需要一个Thread类来启动

// 把一个实现Runnable接口的类放入Thread中,并启动该Thread线程
new Thread(new Runnable(){}).start();

所以三种方式的本质都是一样的,本质都是第一种。

在实际开发中,我们通常采用线程池的方式来完成Thread的创建,更好管理线程资源。

run() & start()

不管是继承Thread还是实现RunnableCallable,都需要实现run():它规定的是一个可执行的任务;而启动一个线程,需要执行一个Threadstart()

Thread

class MyThread extends Thread{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+":running.....");
    }
}

public static void main(String[] args){
        MyThread thread = new MyThread();
        //正确启动线程的方式
        //thread.run();//调用方法并非开启新线程
        thread.start();v
}

Runnable

class MyTask implements Runnable{

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+":running....");
    }
}

public static void main(String[] args){
        MyTask task = new MyTask();
        //task.start(); //并不能直接以线程的方式来启动
        //它表达的是一个任务,需要启动一个线程来执行
        new Thread(task).start();
    }

Callable

class MyTask2 implements Callable<Boolean>{

    @Override
    public Boolean call() throws Exception {
        return null;
    }
}

本质上来说创建线程的方式就是继承Thread,就是线程池,内部也是创建好线程对象来执行任务。

参考:

  1. Java全链路面试指南:31,创建线程的方式
  2. Java面试题突击100道!:P23 创建线程的方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值