文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

拼多多一面:Java 有几种方式创建线程?

2024-11-29 18:01

关注

从应用层面来说,Java 中创建线程的方式主要有四种:

每种方法都有其独特的特性和适用场景,下面我们将分别讲解4种方式。

继承 Thread 类

通过继承 Thread类来创建线程是 Java中最简单,最基本的方法之一。每一个Thread实例代表着一个单独的执行线程,通过重写 Thread类的run()方法,我们可以定义线程要执行的操作,调用start()方法时,JVM会创建一个新的操作系统线程,并在该线程上调用run()方法。

示例代码:

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread is running using Thread class.");
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}

特点和适用场景:

实现 Runnable 接口

实现Runnable接口是一种更灵活的创建线程的方式。Runnable接口只定义了一个方法run(),通过实现该接口的类并将其实例传递给Thread对象,我们可以将想要执行的任务分离成单独的类。

示例代码:

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Thread is running using Runnable interface.");
    }
}

public class Main {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();
    }
}

特点和适用场景:

实现 Callable 接口配合 Future

Callable 接口与 Runnable 接口类似,但不同的是 Callable 可以返回结果或抛出异常。通常与Future和ExecutorService结合使用,ExecutorService管理线程的生命周期,Future对象可以获取线程的执行结果或状态。

示例代码:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

class MyCallable implements Callable {
    @Override
    public String call() throws Exception {
        return "Thread is running using Callable interface.";
    }
}

public class Main {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future future = executor.submit(new MyCallable());

        try {
            String result = future.get();
            System.out.println(result);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        } finally {
            executor.shutdown();
        }
    }
}

特点和适用场景:

使用Executor框架(线程池)

Executor 框架是 Java 并发编程的基础结构,分离了任务的提交和任务的执行。通过 ExecutorService 提交任务,可以通过复用线程来提高性能,降低系统资源的开销,然后框架负责管理线程池、任务调度等。

示例代码:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(3);

        Runnable task = () -> {
            System.out.println("Thread is running using Executor framework.");
        };

        for (int i = 0; i < 5; i++) {
            executor.submit(task);
        }

        executor.shutdown();
    }

特点和适用场景:

如何选择?

总结

线程是 Java的最小执行单元,Java如何创建线程是个古老又重要的话题和面试题,这篇文章我们又啰嗦了一遍。作为开发人员,选择哪种方式创建线程,需要结合应用的具体需求和特点,但是,无论选择哪种方式,理解每种方法的原理,特点与适用场景在实际开发中都至关重要。

来源:猿java内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯