• 面试题-多线程篇-Java语言创建线程有几种不同的方式


    Java语言中,创建线程主要有四种不同的方式:

    1.继承Thread类:Java中的Thread类是实现线程的最基本方法。你可以通过继承Thread类并重写其run()方法来创建新线程。然后你可以创建Thread的实例,并调用start()方法启动新线程。

     
    
    1. javapublic class MyThread extends Thread {
    2. @Override
    3. public void run() {
    4. System.out.println("This is a thread created by extending Thread class");
    5. }
    6. }
    7. public class Main {
    8. public static void main(String[] args) {
    9. MyThread myThread = new MyThread();
    10. myThread.start();
    11. }
    12. }

    2.实现Runnable接口:如果你有一个已经存在的类,而你不想让它继承Thread类,你可以让这个类实现Runnable接口。然后你可以创建一个Thread对象,把你的Runnable对象作为参数传递给Thread的构造函数,然后调用start()方法启动新线程。

     
    
    1. javapublic class MyRunnable implements Runnable {
    2. @Override
    3. public void run() {
    4. System.out.println("This is a thread created by implementing Runnable interface");
    5. }
    6. }
    7. public class Main {
    8. public static void main(String[] args) {
    9. Thread thread = new Thread(new MyRunnable());
    10. thread.start();
    11. }
    12. }

    3.使用Executor框架:Java的Executor框架提供了一种更为高级的方式来创建和管理线程。你可以创建一个ExecutorService,然后使用它的submit()方法提交一个Callable对象,这会返回一个Future对象。你也可以使用ExecutorService的execute()方法来执行一个Runnable对象。这两种方法都会在新线程中运行你的任务。

     
    
    1. javapublic class MyCallable implements Callable<String> {
    2. @Override
    3. public String call() throws Exception {
    4. return "Hello, World!";
    5. }
    6. }
    7. public class Main {
    8. public static void main(String[] args) throws ExecutionException, InterruptedException {
    9. ExecutorService executorService = Executors.newSingleThreadExecutor();
    10. Future<String> future = executorService.submit(new MyCallable());
    11. System.out.println(future.get());
    12. executorService.shutdown(); // 关闭线程池,不关闭的话,程序可能无法正常退出
    13. }
    14. }

    4.使用线程池(ThreadPoolExecutor):用 ExecutorService 创建线程
    注意:不建议用 Executors 创建线程池,建议用 ThreadPoolExecutor 定义线程池。
    用的无界队列,可能造成 OOM ;不能自定义线程名字,不利于排查问题。

    以上四种方式底层都是基于 Runnable

  • 相关阅读:
    408王道操作系统强化——概述
    机器学习笔记之EM算法(二)EM算法公式推导过程
    DPDK KNI介绍
    Ubuntu,Windows下编译MNN的推理和模型转化工具
    Java线程安全与对象头结构信息
    正确重写equals和hashcode方法
    综合管廊UWB人员定位系统
    3D感知技术(1)3D数据及其数据表示
    适用于Linux的Windows子系统(在VScode中开发Linux项目)
    六个高频 MySQL 面试题
  • 原文地址:https://blog.csdn.net/qq_34783818/article/details/134004501