java创建线程的几种方式

继承Thread类

在Java中,创建线程有几种常见的方式:

  1. 继承Thread类:
    • 创建一个继承自Thread类的子类。
    • 在子类中重写Thread类的run()方法,定义线程要执行的任务。
    • 创建子类对象并调用其start()方法,启动线程。

示例代码:

class MyThread extends Thread {
    @Overide
    public void run() {
        // 线程要执行的任务
    }
}

// 创建线程并启动
MyThread myThread = new MyThread();
myThread.start();

实现Runnable接口

  • 创建一个实现了Runnable接口的类,该类包含一个run()方法。
  • 在run()方法中定义线程要执行的任务。
  • 创建该类的对象,并将其作为参数传递给Thread类的构造方法。
  • 调用Thread对象的start()方法,启动线程。

示例代码:

class MyRunnable implements Runnable {
    public void run() {
        // 线程要执行的任务
    }
}

// 创建线程并启动
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();

使用Callable和Future

  • 创建一个实现了Callable接口的类,该类包含一个call()方法。
  • 在call()方法中定义线程要执行的任务,并返回一个结果。
  • 创建一个ExecutorService对象,调用submit()方法提交Callable任务。
  • 通过返回的Future对象获取线程执行的结果。

示例代码:

import java.util.concurrent.*;

class MyCallable implements Callable<String> {
    public String call() throws Exception {
        // 线程要执行的任务
        return "Task completed";
    }
}

// 创建线程池并提交任务
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new MyCallable());

// 获取线程执行的结果
String result = future.get();

// 关闭线程池
executor.shutdown();

这些方式提供了创建线程的灵活性和可控性,可以根据具体场景选择适合的方式来创建和管理线程。

thread类与runnable接口的区别

  1. 继承关系:

    • Thread类:Thread是一个具体的类,在创建线程时可以直接继承Thread类,并重写其中的run()方法来定义线程要执行的任务。
    • Runnable接口:Runnable是一个函数式接口,可以通过实现该接口来创建线程对象,需要将Runnable对象作为参数传递给Thread类的构造方法。
  2. 多继承:

    • Thread类:由于Java是单继承语言,如果选择继承Thread类创建线程,就无法再继承其他类。
    • Runnable接口:由于实现Runnable接口只需要实现run()方法,因此可以继续继承其他类或实现其他接口,提高了灵活性。
  3. 代码复用:

    • Thread类:每个线程都是一个独立的Thread对象,如果多个线程执行相同的任务,需要为每个线程创建新的Thread子类实例,导致代码冗余。
    • Runnable接口:可以将实现了Runnable接口的对象作为任务传递给多个Thread对象,实现了任务的代码复用。
  4. 线程安全:

    • Thread类:在使用Thread类创建线程时,多个线程间共享数据和资源不方便,需要额外处理同步问题。
    • Runnable接口:多个线程可以共享同一个Runnable对象,方便实现线程间的数据共享和协调。

总结:使用Thread类创建线程是一种简单直接的方式,但因为继承的限制和代码冗余问题,相对不够灵活和可复用。而实现Runnable接口可以克服这些问题,提供了更好的代码复用、多继承能力和线程安全性。因此,在大多数情况下,推荐使用实现Runnable接口的方式来创建线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值