基于實現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.pswp.cn/web/44383.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44383.shtml
英文地址,請注明出處:http://en.pswp.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開…