【java进阶】Java中线程的实现方式

news2024/11/25 12:33:15

🌈键盘敲烂,年薪30万🌈

线程的四种实现方式:

1. 继承Thread类

2. 实现Runnable接口

3. 实现Collable接口

4. 线程池获取线程


1. 继承Thread类

💧优点:

  • 简单易懂,适用于简单的线程需求。
  • 直接继承Thread类,方便编写和理解。

💧缺点:

  • 由于Java是单继承的,如果已经继承了其他类,就无法再通过继承Thread类来创建线程。

注意:Thread是Runnable接口的一个实现类,相当于java为我们封装好的一个简单线程类

👀代码实现:

class MyThread extends Thread {
    public void run() {
        // 线程执行逻辑
    }
}

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

2. 实现Runnable接口

💧优点:

  • 避免了单继承的限制,一个类可以实现多个接口。
  • 更灵活,适用于多个线程共享一个任务的情况。

💧缺点:

  • 代码相对繁琐一些。

👀代码实现:

class MyRunnable implements Runnable {
    public void run() {
        // 线程执行逻辑
    }
}

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

3. 实现Collable接口

💧优点:

  • 可以获取线程执行的结果,并且可以抛出异常。

💧缺点:

  • 相对于Runnable,写法略显复杂。

👀代码实现:

class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        int total = 0;
        for (int i = 0; i <= 100; i++) {
            total += i;
        }
        return total;
    }
}
    //创建线程任务
    MyCallable myCallable = new MyCallable();
    //管理结果
    FutureTask<Integer> integerFutureTask = new FutureTask<Integer>(myCallable);
    //创建线程
    Thread thread = new Thread(integerFutureTask);

    thread.start();
    Integer ans = integerFutureTask.get();
    System.out.println(ans);

4. 线程池获取线程

创建线程池 - 提交任务 - 销毁线程池

💧优点:

  • 线程池中的线程可以被重复利用,减少了线程的创建和销毁的开销。

👀代码实现:

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

public class ThreadPoolExample {

    public static void main(String[] args) {
        // 创建一个固定大小的线程池,大小为3
        ExecutorService executorService = Executors.newFixedThreadPool(3);

        // 提交任务给线程池执行
        for (int i = 0; i < 5; i++) {
            Runnable task = new MyTask(i);
            executorService.submit(task);
        }

        // 关闭线程池
        executorService.shutdown();
    }

    static class MyTask implements Runnable {
        private int taskId;

        public MyTask(int taskId) {
            this.taskId = taskId;
        }

        @Override
        public void run() {
            System.out.println("Task ID : " + taskId + " is running on thread " + Thread.currentThread().getName());
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1206627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python开源项目VQFR——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

Python Anaconda 的安装等请参阅&#xff1a; Python开源项目CodeFormer——人脸重建&#xff08;Face Restoration&#xff09;&#xff0c;模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134334021 VQFR也是 腾讯 LAB 的作品&…

无代码:解决非程序员的开发难题

最近&#xff0c;有个小型企业的负责人找上我&#xff0c;说他公司需要一个内部管理系统&#xff0c;来提高工作和协作效率&#xff0c;但他没有编程经验&#xff0c;也不打算花费大量时间和金钱雇佣专业的开发团队&#xff0c;他问我有没有什么解决方案。 针对这个问题&#…

臀部筋膜炎怎么治疗最有效

臀部筋膜炎的主要症状包括以下几点&#xff1a; 一、筋膜炎发生时会导致臀部疼痛以及局部红肿的情况。 二、可能会引起臀部活动受限。 三、可能会导致患者不能取坐位&#xff0c;因为坐位时可能由于局部压迫而引起筋膜炎疼痛症状加重&#xff0c;而引起患者不能取坐位的情况…

酷开科技丨酷开系统,带你进入惊喜不断的影视世界!

随着科技的迅速发展&#xff0c;智能电视已经成为家庭娱乐的重要组成部分。而要说到智能电视&#xff0c;就不得不提到酷开系统&#xff0c;作为一款智能电视操作系统&#xff0c;酷开系统以其独特的功能和出色的使用体验&#xff0c;让观众们看到了到惊喜不断的影视世界。 如…

智慧渔业捕捞计数项目设计书

&#xff08;一&#xff09;项目背景 根据捕捞水域的不同&#xff0c;我国水产捕捞可划分为海洋捕捞、远洋捕捞以及淡水捕捞三大类型。其中&#xff0c;淡水渔业主要是指在淡水水域进行捕捞、养殖以获得淡水水产品并对这些水产品进行加工的社会生产领域。 近年来&#xff0c;随…

AERMOD模型配置方法

数值模式模拟是分析大气污染物时空分布和成分贡献的重要工具&#xff0c;利用模拟结果可以分析大气污染的来源、成因、污染程度、持续时间、主要成分、相对贡献等问题&#xff0c;有助于分析并合理控制污染源排放&#xff0c;为产业调整提供参考。当前&#xff0c;针对不同理论…

Unity Meta Quest 一体机开发(五):手势抓取概述

文章目录 &#x1f4d5;教程说明&#x1f4d5; Oculus Integration 中的三种手势抓取方式⭐Hand Grab⭐Touch Hand Grab⭐Distance Hand Grab 此教程相关的详细教案&#xff0c;文档&#xff0c;思维导图和工程文件会放入 Seed XR 社区。这是一个高质量知识星球 XR 社区&#…

稳定扩散与潜伏扩散:哪个更好?

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器 本文对这两种类型的扩散、它们的工作原理、差异和未来影响进行了详细讨论。 了解稳定扩散 通过稳定扩散生成的图像 Stable Diffu…

[数据结构大作业]HBU 河北大学校园导航

校园导航实验报告 问题描述&#xff1a; 以我校为例&#xff0c;设计一个校园导航系统&#xff0c;主要为来访的客人提供信息查询。系统有两类登陆账号&#xff0c;一类是游客&#xff0c;使用该系统方便校内路线查询&#xff1b;一类是管理员&#xff0c;可以使用该系统查询…

经典文献阅读之--Fast and Robust Ground Surface Estimation...(均匀B样条采样快速估计地平面)

0. 简介 对于激光雷达的地面估计分割&#xff0c;目前其实有很多方法做了快速并鲁棒的分割&#xff0c;比如说我们之前写的一篇《经典文献阅读之–FEC》一文中就给出了快速分割的方案&#xff0c;当中第一步就是需要对地面进行分割。而我们这次看的是一篇使用均匀B样条的方法来…

“纯真·诗心—韩玉臣油画艺术与欧洲油画珍藏展”在京开幕

11月4日&#xff0c;由中国艺术研究院油画院、河北省美术家协会共同主办的“纯真诗心——韩玉臣油画艺术与欧洲油画珍藏展”在中国艺术研究院油画院开幕 中国文化人物记者 苏晴/摄影报道 中国美术家协会名誉主席、中央美术学院原院长靳尚谊致辞 中国艺术研究院原院长连辑致辞 …

域名怎么注册?一步步教你如何注册自己的域名

在互联网时代&#xff0c;网站是个人或企业展示品牌形象和推广品牌的重要工具&#xff0c;而无论是个人还是企业&#xff0c;在建设网站时&#xff0c;都需要提前注册域名。那么域名应该怎么注册呢&#xff1f;从域名选择&#xff0c;到选择域名注册商&#xff0c;再到域名注册…

段的概念_重定位的引入

段的概念 代码段、只读数据段、可读可写数据段、BSS段。 char g_Char A; //可读可写&#xff0c;不能放在ROM上&#xff0c;应该放在RAM里 const char g_Char2 B; //只读变量&#xff0c;可以放在ROM上 int g_A 0; //初始值为0&#xff0c;没有必要浪费空间 int g_B; //没…

容器size()无符号数导致的for循环崩溃

1.问题描述 容器size()无符号数导致的for循环崩溃 for (int index 0; index < static_cast(intVec.size())-1; index) { printf(“%d”,intVec[index]); } 如果不做强转&#xff0c;可能会有两个问题&#xff1a; &#xff08;1&#xff09;编译不过 &#xff08;2&#x…

项目管理:如何利用有限的时间完成无限的任务

时间管理&#xff0c;实质上就是利用有限的时间完成无限的任务。它要求我们通过对任务的安排&#xff0c;实现在有限的时间内&#xff0c;使任务变得更有条理。 时间管理就像整理房间。如果你长期不进行整理&#xff0c;房间的杂物就会越积越多。如果将各类物品进行分类&…

Pyecharts数据可视化综合应用PyEcharts概述在线闯关_头歌实践教学平台

PyEcharts概述 第1关 快速上手任务描述相关知识导入图表类型添加数据设置图表样式输出图表链式调用编程要求测试说明代码 第1关 快速上手 任务描述 本关任务&#xff1a;快速上手使用pyEcharts进行绘图。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1. p…

YOLOv8-Seg改进:卷积变体系列篇 | SCConv(空间和通道重建卷积) | CVPR2023

🚀🚀🚀本文改进:SCConv(空间和通道重建卷积),引入到YOLOv8,与C2f结合实现二次创新; 🚀🚀🚀SCConv亲测在多个数据集能够实现涨点 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把…

PGVector 管理工具 pgAdmin

PGVector 管理工具 pgAdmin pgAdmin 下载地址pgAdmin 安装pgAdmin 使用 pgAdmin 下载地址 https://www.postgresql.org/ftp/pgadmin/pgadmin4/ pgAdmin 安装 双击 pgadmin4-*-x64.exe 安装文件&#xff0c;选择安装路径&#xff0c;后面安装提示单击 next 就可以了。 pgAdm…

虹科分享 | 一文带你了解增强现实(AR)技术的前世今生!

AR技术的前世今生 引言&#xff1a;增强现实&#xff08;Augmented Reality, AR&#xff09;技术在近几年大放光彩&#xff0c;您可能在《头号玩家》或《黑镜》等影视作品中看到过人们对AR技术的其奇思妙想&#xff0c;也可能从科普文章中了解过“元宇宙”、“数字孪生”等概念…