基于实现Runnable接口的java多线程

    Java多线程通常可以通过继承Thread类或者实现Runnable接口实现。本文主要介绍实现Runnable接口的java多线程的方法, 并通过ThreadPoolTaskExecutor调用执行,以及应用场景。

一、应用场景

异步、并行、子任务、磁盘读写、数据库查询、网络请求等耗时操作等。

以下以定时任务中,for循环的并行操作为例,在for循环中应用多线程。

二、实现Runnable接口

Java中的Runnable接口只有一个方法run(),实现runnable接口复写run()方法。

示例:

DtoRealtimeThreadTask.java 线程方法 

public class DtoRealtimeThreadTask implements Runnable{private IFactoryService factoryService;private RedisCache redisCache;
private RedisTemplate redisTemplate;private int runMinutes;//  重定义构造方法1public DtoRealtimeThreadTask(RedisTemplate redisTemplate , int runMinutes, IFactoryService factoryService , RedisCache redisCache){this.redisTemplate = redisTemplate;this.runMinutes = runMinutes;this.factoryService= factoryService;this.redisCache = redisCache;
}//  重定义构造方法2***//  重写run方法@Override
public void run() {// run方法中的service、实体类等变量均为本类中的变量,不能使用@Autowired// 本类中的变量由自定义构造方法传入}}

三、ThreadPoolTaskExecutor调用run方法

ThreadPoolTaskExecutor.excute(a);

示例:

定时任务for循环内,并行任务使用多线程:

for(Object obj : objList){// 1、调用线程构造方法DtoRealtimeThreadTask dtoRealtimeThreadTask= new DtoRealtimeThreadTask(redisTemplate,runMinutes,factoryService, redisCache);// 2、执行run方法threadPoolTaskExecutor.execute(dtoRealtimeThreadTask);// 3、附:线程执行状态:long taskCount = threadPoolTaskExecutor.getThreadPoolExecutor().getTaskCount();
long completedCount = threadPoolTaskExecutor.getThreadPoolExecutor().getCompletedTaskCount();
if(taskCount - completedCount >= 1000){logger.info("@@@@@@@@@@@@@@@@@@ 线程池活跃线程数量:{}", threadPoolTaskExecutor.getActiveCount());logger.info("@@@@@@@@@@@@@@@@@@ 线程池任务数量:{}", taskCount);logger.info("@@@@@@@@@@@@@@@@@@ 线程池已完成任务数量:{}", completedCount);logger.info("XXXXXXXXXXXXXXXXXXXXXXXXXXX---- 主线程休眠5秒 ----XXXXXXXXXXXXXXXXXXXXXXXXXXX");try{Thread.sleep(10000);}catch (Exception e){logger.error(e.getMessage());}}

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

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

相关文章

笔记:在Entity Framework Core中如何处理多线程操作DbContext

一、目的: 在使用Entity Framework Core (EF Core) 进行多线程操作时,需要特别注意,因为DbContext类并不是线程安全的。这意味着,你不能从多个线程同时使用同一个DbContext实例进行操作。尝试这样做可能会导致数据损坏、异常或不可…

C语言排序之快速排序

快速排序是一种高效的排序算法。它采用了分治的策略,通过选择一个基准元素,将待排序的序列划分为两部分,一部分的元素都比基准元素小,另一部分的元素都比基准元素大,然后对这两部分分别进行快速排序,从而实…

前端开发工具

Lodash 有普通的 CommonJS 版本(通常称为 lodash)和 ES6 模块版本(称为 lodash-es)。它们的主要区别包括: 模块化:lodash 是传统的 CommonJS 模块,可使用 require 或 import 引入;lo…

2024年,搞AI就别卷模型了

你好,我是三桥君 2022年11月30日,OpenAI发布了一款全新的对话式通用人工智能工具——ChatGPT。 该工具发布后,仅用5天时间就吸引了100万活跃用户,而在短短2个月内,其活跃用户数更是飙升至1亿,成为历史上增…

ARP协议介绍与ARP协议的攻击手法

ARP是什么? ARP是通过网络地址(IP)来定位机器MAC地址的协议,它通过解析网络层地址(IP)来找寻数据链路层地址(MAC)的网络传输协议。 对个定义不能理解的话,可以结合 TCP/I…

《恋与深空》2.0上线肉鸽模式,乙游玩家会买账吗?

乙游和肉鸽,看似八竿子打不着的两个赛道,被叠纸给融合起来了。 根据《恋与深空》官方消息,即将在7月15日更新的2.0交错视界版本中,会上线全新常驻玩法“混沌深网”,配置高随机性Roguelike模式,并搭载了管理…

理想文档发布了~一个集合了多个优秀开源项目的在线云文档

两年前我做了一个简单的在线云文档项目,选择了开源的思维导图、白板、流程图、幻灯片等项目,在它们基础上添加了云存储的功能,然后写了一个简单的工作台管理文件夹和文件: 放在了自己的个人网站上使用,同时写了一篇水文…

【Leetcode 每日一题】349. 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2]示例 2: 输入:nums…

[web]-代码审计-运维失误

打开页面可以看到如下: 1、查看源代码,发现验证码功能是正常生成的随机的,输入也没有过滤,无法采用爆破。 2、根据题目提示运维失误,使用dirsearch扫描,发现提交的地址check.php, 使用php5、.bak可以打开&…

2.The DispatcherServlet

The DispatcherServlet Spring的Web MVC框架与许多其他Web MVC框架一样,是请求驱动的,围绕一个中央Servlet(即DispatcherServlet)设计,该Servlet将请求分派给控制器,并提供其他功能以促进Web应用程序的开发…

创建I/O文件fopen

#include〈stdio.h〉 int mian(int argc,char *argv[]){ FILE *fp;//结构体fp fpfopen(“1.txt”,“r”); }

程序的控制结构——if-else语句(双分支结构)【互三互三】

目录 🍁 引言 🍁if-else语句(双分支结构) 👉格式1: 👉功能: 👉程序设计风格提示: 👉例题 👉格式2: 👉…

Monaco 使用 ColorProvider

Manco 中可以使用调色板对色值进行修改,首先看一下调色版效果。 调色板是 Monaco-Editor 中一个特别的组件,通过两个方法实现呼出调色板,provideColorPresentations 显示调色窗口,provideDocumentColors 监听页面的变更&#xff0…

如何将libwebsockets库编译为x86架构

在之前的文章中,我们已经详细介绍了如何交叉编译libwebsockets并将其部署到ELF 1开发板上。然而在调试阶段,发现将libwebsockets在Ubuntu环境下编译为x86架构可能更为方便和高效。 通过在主机环境中编译运用x86架构下的libwebsockets库,可以…

阿里ChatSDK使用,开箱即用聊天框

介绍: 效果:智能助理 ChatSDK,是在ChatUI的基础上,结合阿里云智能客服的最佳实践,沉淀和总结出来的一个开箱即用的,可快速搭建智能对话机器人的框架。它简单易上手,通过简单的配置就能搭建出对…

Flowable工作流引擎核心事件详细解释说明

Flowable工作流引擎核心事件详细解释说明 流程执行事件 需要了解全部详细事件的请看这个链接Flowable(一个开源的工作流和业务流程管理引擎)中与事件相关的一些核心概念 流程开始和结束事件 PROCESS_STARTED:标记流程实例的开始。PROCESS…

公益快报 | 中科亿海微以企业奖学金为纽带,深化校企合作

近日,为回报母校、激励湖南大学机器人视觉感知与控制技术国家工程研究中心广大学生,中科亿海微电子科技(苏州)有限公司(简称“中科亿海微”)捐赠设立企业奖学金。此项奖学金的设立标志着校企合作迈向全方位…

【C++】C++中struct结构体和class类的区别

在C中, struct 和 class 在很多方面都非常相似,它们都可以包含数据成员(变量)和成员函数(方法)。然而,它们之间还是存在一些关键的区别: 1. 默认访问权限 struct 的成员默认是 pub…

实现组件存储 WinSxS 文件夹解析

目录 背景 目录名的组成 解析目录结构 更新&总结 文章出处链接:[https://blog.csdn.net/qq_59075481/article/details/140385969]. 背景 WinSxS 文件夹位于 Windows 文件夹中,例如 C: \Windows\WinSxS。它是 Windows 组件存储文件的位置。 Wind…

深入理解Spring Boot中的日志框架选择

深入理解Spring Boot中的日志框架选择 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 背景与需求 在开发和运维中,日志是不可或缺的重要组成部分。Spring Boot作为一个流行的Java开…