【JAVA】封装多线程实现

系列文章目录

java知识点


文章目录

  • 系列文章目录
  • 👉前言
  • 👉一、封装的目标
  • 👉二、常见的封装方式及原理
  • 👉壁纸分享
  • 👉总结


👉前言

在 Java 中,封装多线程的原理主要围绕着将多线程相关的操作和逻辑进行抽象、隐藏底层细节,提供更简洁、易用和安全的接口供开发者使用。以下从封装的目标、常见的封装方式以及其背后的核心原理等方面进行详细解析。

博客将会介绍如何实现Unity优化协程。希望这篇博客对Unity的开发者有所帮助。
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
欢迎点赞评论哦.下面就让我们进入正文吧 !


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、封装的目标

简化使用:Java 原生的多线程编程涉及到很多复杂的操作,如线程的创建、启动、同步控制等。通过封装,可以提供简单易用的接口,让开发者无需深入了解底层细节就能方便地使用多线程功能。
提高安全性:多线程编程中存在着线程安全问题,如数据竞争、死锁等。封装可以在内部实现线程安全的机制,避免开发者在使用时犯错,提高程序的稳定性和安全性。
增强可维护性和可扩展性:将多线程逻辑封装在独立的模块中,使得代码结构更加清晰,便于维护和扩展。当需要更改多线程的实现方式时,只需修改封装模块的内部代码,而不会影响到使用该封装的其他部分。

👉二、常见的封装方式及原理

基于 Runnable 接口或 Callable 接口的封装
原理:Runnable 接口和 Callable 接口是 Java 中定义线程任务的基础接口。通过将线程任务封装在实现了这两个接口的类中,可以将任务的定义和线程的管理分离开来。Runnable 接口中的 run() 方法没有返回值,而 Callable 接口中的 call() 方法可以有返回值,适用于需要获取线程执行结果的场景。

代码如下:

import java.util.concurrent.*;

// 实现 Runnable 接口的任务类
class MyRunnableTask implements Runnable {
    @Override
    public void run() {
        System.out.println("Runnable 任务正在执行,线程名: " + Thread.currentThread().getName());
    }
}

// 实现 Callable 接口的任务类
class MyCallableTask implements Callable<String> {
    @Override
    public String call() throws Exception {
        return "Callable 任务执行结果,线程名: " + Thread.currentThread().getName();
    }
}

public class ThreadTaskWrapper {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 使用 Runnable 任务
        Thread runnableThread = new Thread(new MyRunnableTask());
        runnableThread.start();

        // 使用 Callable 任务
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<String> future = executor.submit(new MyCallableTask());
        String result = future.get();
        System.out.println(result);
        executor.shutdown();
    }
}

线程池的封装
原理:线程池是一种管理和复用线程的机制,它可以避免频繁创建和销毁线程带来的性能开销。Java 提供了 ExecutorService 接口和相关的实现类(如 ThreadPoolExecutor、Executors 工具类)来创建和管理线程池。通过封装线程池,可以提供统一的接口来提交任务,同时管理线程的生命周期和资源分配。

代码如下:

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

// 封装线程池的类
class ThreadPoolWrapper {
    private final ExecutorService executor;

    public ThreadPoolWrapper(int poolSize) {
        this.executor = Executors.newFixedThreadPool(poolSize);
    }

    public void submitTask(Runnable task) {
        executor.submit(task);
    }

    public void shutdown() {
        executor.shutdown();
    }
}

// 使用封装的线程池
public class Main {
    public static void main(String[] args) {
        ThreadPoolWrapper threadPool = new ThreadPoolWrapper(3);
        for (int i = 0; i < 5; i++) {
            final int taskId = i;
            threadPool.submitTask(() -> {
                System.out.println("任务 " + taskId + " 正在执行,线程名: " + Thread.currentThread().getName());
            });
        }
        threadPool.shutdown();
    }
}

请添加图片描述

👉壁纸分享

请添加图片描述


👉总结

本次总结的就是【JAVA】封装多线程实现, 有需要会继续增加功能
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nginx 反向代理 配置请求路由

nginx | 反向代理 | 配置请求路由 nginx简介 Nginx&#xff08;发音为“Engine-X”&#xff09;是一款高性能、开源的 Web 服务器和反向代理服务器&#xff0c;同时也支持邮件代理和负载均衡等功能。它由俄罗斯程序员伊戈尔西索夫&#xff08;Igor Sysoev&#xff09;于 2004…

用Python实现Excel数据同步到飞书文档

目录 一、整体目标 二、代码结构拆解 三、核心逻辑讲解&#xff08;重点&#xff09; 1. 建立安全连接&#xff08;获取access_token&#xff09; 2. 定位文档位置 3. 数据包装与投递 四、异常处理机制 五、函数讲解 get_access_token() 关键概念解释 1. 飞书API访问…

SQLMesh 系列教程8- 详解 seed 模型

在数据分析和建模过程中&#xff0c;外部模型&#xff08;External Models&#xff09;在 SQLMesh 中扮演着重要角色。外部模型允许用户引用外部数据源或现有数据库表&#xff0c;从而实现灵活的数据整合和分析。本文将介绍外部模型的定义、生成方法&#xff08;包括使用 CLI 和…

《微软量子芯片:开启量子计算新纪元》:此文为AI自动生成

量子计算的神秘面纱 在科技飞速发展的今天,量子计算作为前沿领域,正逐渐走进大众的视野。它宛如一把神秘的钥匙,有望开启未来科技变革的大门,而微软量子芯片则是这把钥匙上一颗璀璨的明珠。 量子计算,简单来说,是一种遵循量子力学规律调控量子信息单元进行计算的新型计算…

使用FFmpeg将PCMA格式的WAV文件转换为16K采样率的PCM WAV文件

使用FFmpeg将PCMA格式的WAV文件转换为16K采样率的PCM WAV文件 一、FFmpeg 简介二、PCMA 格式简介三、PCM 格式简介四、转换步骤五、注意事项六、总结在当今的数字音频处理领域,FFmpeg 无疑是一款功能强大的多媒体处理工具。它能够处理几乎所有格式的音频和视频文件,包括将特定…

【JavaEE进阶】#{}和${}

&#x1f343;前言 MyBatis参数赋值有两种⽅式,使⽤ #{} 和 ${}进⾏赋值,接下来我们看下⼆者的区别 &#x1f333;#{}和${}使⽤ 我们先来看一下两者在基础数据类型与string类型下的使用 &#x1f6a9;Interger类型的参数&#xff08;基础数据类型&#xff09; &#x1f3c…

【JavaEE进阶】图书管理系统 - 贰

目录 &#x1f332;前言 &#x1f384;设计数据库 &#x1f343;引⼊MyBatis和MySQL驱动依赖 &#x1f333;Model创建 &#x1f38d;约定前后端交互接口 &#x1f340;服务器代码 &#x1f6a9;控制层 &#x1f6a9;业务层 &#x1f6a9;数据层 &#x1f334;前端代码…

cline通过硅基流动平台接入DeepSeek-R1模型接入指南

为帮助您更高效、安全地通过硅基流动平台接入DeepSeek-R1模型&#xff0c;以下为优化后的接入方案&#xff1a; DeepSeek-R1硅基流动平台接入指南 &#x1f4cc; 核心优势 成本低廉&#xff1a;注册即送2000万Tokens&#xff08;价值约14元&#xff09;高可用性&#xff1a;规…

Maven——Maven开发经验总结(1)

摘要 本文总结了 Maven 开发中的多个关键经验&#xff0c;包括如何根据版本号决定推送到 releases 或 snapshots 仓库&#xff0c;如何在构建过程中跳过测试&#xff0c;父项目如何控制子项目依赖版本&#xff0c;父项目依赖是否能传递到子项目&#xff0c;如何跳过 Maven dep…

【微服务优化】ELK日志聚合与查询性能提升实战指南

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

Windows 中的启动项如何打开?管理电脑启动程序的三种方法

在日常使用电脑时&#xff0c;我们经常会发现一些应用程序在开机时自动启动&#xff0c;这不仅会拖慢系统的启动速度&#xff0c;还可能占用不必要的系统资源。幸运的是&#xff0c;通过几个简单的步骤&#xff0c;你可以轻松管理这些开机自启的应用程序。接下来&#xff0c;我…

【Linux网络】认识协议(TCP/UDP)、Mac/IP地址和端口号、网络字节序、socket套接字

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、初识协议2、UDP、TCP3、Mac、IP地址4、端口号5、网络字节序6、socket 1、初识协议 协议就是一种约定。如何让不同厂商生产的计…

【架构思维基础:如何科学定义问题】

架构思维基础&#xff1a;如何科学定义问题 一、问题本质认知 1.1 问题矛盾 根据毛泽东《矛盾论》&#xff0c;问题本质是系统内部要素间既对立又统一的关系。例如&#xff1a; 电商系统矛盾演变&#xff1a; 90年代&#xff1a;商品供给不足 vs 消费需求增长00年代&#x…

jetbrains IDEA集成大语言模型

一、CodeGPT ‌CodeGPT‌是由CSDN打造的一款生成式AI产品&#xff0c;专为开发者量身定制。它能够提供强大的技术支持&#xff0c;帮助开发者在学习新技术或解决实际工作中的各种计算机和开发难题‌1。 idea集成 1.在线安装&#xff1a;直接在线安装 2.离线安装 JetBrains Mar…

华为guass在dbever和springboot配置操作

下面记录华为guass在dbever和springboot配置操作&#xff0c;以备忘。 1、安装dbeaver-ce-23.2.0-x86_64-setup.exe和驱动程序 Download | DBeaver Community 2、配置高斯数据库驱动 3、新建数据库连接 4、操作指引 opengauss官方文档 https://docs-opengauss.osinfra.cn/zh…

web的分离不分离:前后端分离与不分离全面分析

让我们一起走向未来 &#x1f393;作者简介&#xff1a;全栈领域优质创作者 &#x1f310;个人主页&#xff1a;百锦再新空间代码工作室 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[1504566…

近10年气象分析(深度学习)

这是一个气象数据分析程序&#xff0c;主要用于分析和可视化气象数据。以下是该文件的主要功能&#xff1a; 1. 数据加载 在线数据&#xff1a;尝试从 GitHub 加载气象数据。 示例数据&#xff1a;如果无法加载在线数据&#xff0c;程序会自动生成示例数据。 2. 数据分析 …

GStreamer源码安装1.24版本

从官网下载 1.24的源码包 https://gitlab.freedesktop.org/gstreamer/gstreamer/-/tree/1.24?ref_typeheads#getting-started &#xff0c;尝试过使用git clone 的方式&#xff0c;但速度贼慢&#xff0c;就选择了下载源码包的方式安装依赖 sudo apt install libssl-dev g me…

Vue面试2

1.跨域问题以及如何解决跨域 跨域问题&#xff08;Cross-Origin Resource Sharing, CORS&#xff09;是指在浏览器中&#xff0c;当一个资源试图从一个不同的源请求另一个资源时所遇到的限制。这种限制是浏览器为了保护用户安全而实施的一种同源策略&#xff08;Same-origin p…

毕业项目推荐:基于yolov8/yolo11的水稻叶片病害检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…