首页 > 其他分享 >创建线程有哪几种方式

创建线程有哪几种方式

时间:2024-11-11 15:30:11浏览次数:1  
标签:Runnable Thread 创建 void 哪几种 new FutureTask 线程 public

1. 继承 ​​Thread​​ 类

优点

  • 简单直观,适合初学者。
  • 直接继承 ​​Thread​​ 类,可以方便地访问和使用 ​​Thread​​ 类的方法。

缺点

  • Java 不支持多继承,因此如果你的类已经继承了其他类,则不能继承 ​​Thread​​ 类。
  • 仅适用于简单的线程任务。

示例

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

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

2. 实现 ​​Runnable​​ 接口

优点

  • 解决了单继承的问题,可以同时实现多个接口。
  • 更灵活,可以将 ​​Runnable​​ 对象传递给多个线程。

缺点

  • 需要通过 ​​Thread​​ 类的构造器来创建线程对象。

示例

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

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

3. 实现 ​​Callable​​ 接口和 ​​FutureTask​

优点

  • ​Callable​​ 接口的 ​​call()​​ 方法可以返回值和抛出异常,更加灵活。
  • 通过 ​​FutureTask​​ 可以获取任务的执行结果。

缺点

  • 相对复杂,适合需要返回结果的任务。

示例

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        return 42;
    }

    public static void main(String[] args) throws Exception {
        FutureTask<Integer> futureTask = new FutureTask<>(new MyCallable());
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println("Result: " + futureTask.get());
    }
}

4. 使用 ​​Executor​​ 框架

优点

  • 提供了更高级的线程管理和调度功能。
  • 适合大规模并发任务的管理。
  • 代码更简洁,可维护性更高。

缺点

  • 学习曲线较陡峭,需要了解 ​​Executor​​ 框架的各个组件。

示例

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

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

    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            executor.submit(new MyRunnable());
        }
        executor.shutdown();
    }
}

 

总结

  • 继承 Thread​ 类:简单直观,适合初学者。
  • 实现 Runnable​ 接口:灵活,解决单继承问题。
  • 实现 Callable​ 接口和 ​FutureTask​​:适合需要返回结果的任务。
  • 使用 Executor​ 框架:适合大规模并发任务的管理,提供高级功能。

推荐使用 ​​Executor​​ 框架,因为它提供了更强大的功能和更好的性能。

标签:Runnable,Thread,创建,void,哪几种,new,FutureTask,线程,public
From: https://www.cnblogs.com/2324hh/p/18539819

相关文章

  • 线程池都有哪些状态
    线程池有五种典型状态: 1.RUNNING(运行状态):在这个状态下,线程池可以接收新的任务提交,并且能够处理已添加到任务队列中的任务。这是线程池的初始状态,也是最活跃的状态。这是最正常的状态2.SHUTDOWN(关闭状态)当调用了线程池的`shutdown()`方法后,线程池进入此状态。此时,线程池不再......
  • 【closerAI ComfyUI】这个服装生成LORA很厉害,黑森林团队推出服装生成LORA,直接描述创建
    closerAIGCcloserAI,一个深入探索前沿人工智能与AIGC领域的资讯平台,我们旨在让AIGC渗入我们的工作与生活中,让我们一起探索AIGC的无限可能性!大家好,我是Jimmy。这期介绍的是黑森林团队开发的服装生成LORA,这个lORA名称叫作:FLUX.1-devLoRAOutfitGenerator,它可以通过详细描述......
  • 使用wxpython开发跨平台桌面应用,动态工具的创建处理
    在我们开发系统的时候,往往需要一个很容易理解功能的工具栏,工具栏是一个系统的快速入口,美观易用的工具栏是可以给系统程序增色不少的,本篇随笔介绍在使用wxpython开发跨平台桌面应用,工具栏的动态展现效果,以及多级工具栏显示等的创建处理过程。1、wxpython工具栏介绍在wxPython中......
  • 【多线程】---1115. 交替打印 FooBar
     解法1:condition_variable + mutex classFooBar{private:intn;mutexmtx;condition_variablecv;boolfoo_done=false;public:FooBar(intn){this->n=n;}voidfoo(function<void()>printFoo)......
  • Elasticsearch上创建的index是yellow健康状态的解决方案
    在Elasticsearch中,索引的健康状态(healthstatus)反映了索引的分片分配情况和集群的整体健康状况。这些状态可以帮助您快速了解索引和集群的运行情况。以下是Elasticsearch中索引的三种健康状态及其意义:1.green(绿色)含义:所有主分片(primaryshards)和副本分片(replicashards)都已成功......
  • Jmeter并发线程场景下共享变量错乱问题解决
    问题复现问题描述使用IF控制器获取前一个请求的后置脚本中设置的全局变量->并发线程下通过vars.get获取变量时,第一个线程和第二个线程获取的变量值一样->导致不同基础数据的请求入参一样方法如下:vars.put("shoppingCartIdList",shoppingCartIdList.toString());/......
  • 因为mysql 8新的认证插件导致主从复制的IO线程失败
    1、错误信息Last_IO_Error:errorconnectingtomaster'[email protected]:3306'-retry-time:60retries:1message:Authenticationplugin'caching_sha2_password'reportederror:Authenticationrequiressecureconnection.2、在主库检查复制用户的pl......
  • Sentos创建后的第一步:设置时间同步,关闭防火墙
    yum配置vi/etc/yum/pluginconf.d/license-manager.conf改为0保存,即可使用yum关闭防火墙和selinuxsudosystemctlstopfirewalldsudosystemctldisablefirewalldsudosed-i"s/SELINUX=enforcing/SELINUX=disabled/g"/etc/selinux/configsudosetenforce0重启......
  • 使用YOLO 模型进行线程安全推理
    使用YOLO模型进行线程安全推理一、了解Python线程二、共享模型实例的危险2.1非线程安全示例:单个模型实例2.2非线程安全示例:多个模型实例三、线程安全推理3.1线程安全示例四、总结4.1在Python中运行多线程YOLO模型推理的最佳实践是什么?4.2为什么每个线程都要有......
  • 15、vsphere client 创建虚拟机
    浏览器访问https://192.168.120.*用户名:密码: 说明:此案例为创建linux的Centos7的操作系统的虚拟机,为最小化安装。CPU,内存,硬盘都为默认值1.鼠标依次点击:主机与集群--à物理机ip--à操作--à新建虚拟机2.创建新虚拟机--àNEXT3.给虚拟机名称填写一下,(一般是操作系统......