欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開始結(jié)束

 更新時(shí)間:2024年05月13日 09:51:57   作者:日常500  
這篇文章主要介紹了Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開始結(jié)束,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

簡(jiǎn)介

最近有一點(diǎn)富裕的時(shí)間,就想分享一下關(guān)于并發(fā)定時(shí)任務(wù)的內(nèi)容,我也是查閱相關(guān)博客文檔并自己搗鼓出來的一點(diǎn)小思路,歡迎各路大佬批評(píng)指正…

應(yīng)用場(chǎng)景

不知道大家對(duì)定時(shí)任務(wù)的使用情況是怎樣,就我個(gè)人而言接觸的也比較少一點(diǎn),分享一下我的使用案例,簡(jiǎn)單點(diǎn)一下使用場(chǎng)景。

最近需要獲取硬件相關(guān)的信息(傳感器信息)到平臺(tái)上進(jìn)行一個(gè)展示,相信有一點(diǎn)經(jīng)驗(yàn)的小伙伴應(yīng)該了解與硬件交互需要涉及到心跳計(jì)時(shí)等等(就不細(xì)說了),所以就用到定時(shí)任務(wù)

我使用的是ThreadPoolTaskScheduler類來進(jìn)行定時(shí)任務(wù)的控制的

下面是我寫的小Demo

代碼邏輯

代碼片(可直接運(yùn)行)

package com.pj.apps.socket.tower;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;

import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;


public class TaskTest {
	//需要對(duì)它進(jìn)行初始化
	private static ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); 
	//存儲(chǔ)定時(shí)任務(wù)編號(hào)及任務(wù)
	private static Map<String,ScheduledFuture<?>> map = new HashMap<>();
	//使用靜態(tài)代碼塊來初始化ThreadPoolTaskScheduler
	static {
		threadPoolTaskScheduler.initialize();
	}
	//開啟定時(shí)任務(wù)的方法
    private static void startCron(String tNo) {
		//通過使用它的方法來對(duì)任務(wù)進(jìn)行開啟和關(guān)閉,使用Cron表達(dá)式,表示時(shí)間間隔并重復(fù)執(zhí)行
    	ScheduledFuture<?> future = threadPoolTaskScheduler.schedule(new MyRunnable(tNo), new CronTrigger("*/5 * * * * ?"));
        map.put(tNo, future);
    } 
 
    //停關(guān)閉定時(shí)任務(wù)
    private static void closeCron(ScheduledFuture<?> future) {
       if (future != null) {
           future.cancel(true);
       }
    }

    //定時(shí)任務(wù)線程
    private static class MyRunnable implements Runnable {
    	private String tNo;
    	public MyRunnable(String tNo) {
    		this.tNo = tNo;
    	}
        @Override
        public void run() {
            System.out.println("線程編號(hào)"+tNo+"定時(shí)任務(wù)邏輯內(nèi)容...");
        }
    } 
	public static void main(String[] args) {
		startCron("9527");
		startCron("9528");
	}
}

運(yùn)行結(jié)果

運(yùn)行結(jié)果

思路簡(jiǎn)單梳理

關(guān)于ThreadPoolTaskScheduler類更詳細(xì)使用可參考大佬們的文章或者百度,這里需要注意的是使用它需要進(jìn)行初始化,我這里在靜態(tài)代碼塊中進(jìn)行了初始化,也可以提出去初始化。

創(chuàng)建了一個(gè)map容器是為了存儲(chǔ)鍵值對(duì)【定時(shí)線程編號(hào)】以及對(duì)應(yīng)的【定時(shí)線程】,可以方便我們后面可以很好的對(duì)每個(gè)定時(shí)任務(wù)進(jìn)行關(guān)閉,因?yàn)殛P(guān)閉定時(shí)器的方法中需要傳的參數(shù)是一個(gè)定時(shí)任務(wù)ScheduledFuture,所以我們可以通過線程編號(hào)去找到它,再進(jìn)行一個(gè)關(guān)閉。

通過Cron表達(dá)式來描述定時(shí)周期,我這里設(shè)置的是每隔5秒執(zhí)行一次,小伙伴們自行去了解一下Cron表達(dá)式。

自定義了一個(gè)任務(wù)內(nèi)容主體線程類MyRunnable,將需要定時(shí)執(zhí)行的邏輯放到這個(gè)里面去,這里還用了一個(gè)帶參構(gòu)造,方便我們傳一些參數(shù)加入到執(zhí)行定時(shí)邏輯里面去,我這里構(gòu)造傳的是模擬的線程編號(hào),需要傳其他更多的參數(shù)可以同樣的方法進(jìn)行參數(shù)的傳遞。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java list隨機(jī)抽取元素的案例

    java list隨機(jī)抽取元素的案例

    這篇文章主要介紹了java list隨機(jī)抽取元素的案例,具有很好的參考,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 深入解析Java中的Class Loader類加載器

    深入解析Java中的Class Loader類加載器

    這篇文章主要介紹了Java中的類加載器,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-03-03
  • Java?異常機(jī)制Exception和自定義異常

    Java?異常機(jī)制Exception和自定義異常

    這篇文章主要介紹了Java?異常機(jī)制Exception+自定義異常,異常分三種檢查性異常、運(yùn)行時(shí)異常、錯(cuò)誤ERROR,下文對(duì)其更多詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Mybatis in條件傳參的三種實(shí)現(xiàn)方式(直接$,List,[])

    Mybatis in條件傳參的三種實(shí)現(xiàn)方式(直接$,List,[])

    這篇文章主要介紹了Mybatis in條件傳參的三種實(shí)現(xiàn)方式(直接$,List,[]),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 教你利用SpringBoot寫一個(gè)屬于自己的Starter

    教你利用SpringBoot寫一個(gè)屬于自己的Starter

    如果我們將可獨(dú)立于業(yè)務(wù)代碼之外的功配置模塊封裝成一個(gè)個(gè)starter,復(fù)用的時(shí)候只需要將其在pom中引用依賴即可,SpringBoot為我們完成自動(dòng)裝配,簡(jiǎn)直不要太爽,這篇文章主要給大家介紹了關(guān)于如何利用SpringBoot寫一個(gè)屬于自己的Starter,需要的朋友可以參考下
    2022-03-03
  • 解析Spring Mvc Long類型精度丟失問題

    解析Spring Mvc Long類型精度丟失問題

    在平時(shí)開發(fā)過程中,經(jīng)常會(huì)使用long類型作為id的類型,但是在使用過程中會(huì)導(dǎo)致long類型數(shù)據(jù)轉(zhuǎn)換為number類型時(shí)的后兩位變?yōu)?,今天小編給大家分享Spring Mvc Long類型精度丟失問題,需要的朋友參考下吧
    2021-06-06
  • 使用Postman自動(dòng)生成Cookie并轉(zhuǎn)換為Java代碼的實(shí)現(xiàn)

    使用Postman自動(dòng)生成Cookie并轉(zhuǎn)換為Java代碼的實(shí)現(xiàn)

    在接口測(cè)試中,有時(shí)候需要在請(qǐng)求中攜帶Cookie信息,為了方便測(cè)試,我們可以使用Postman來自動(dòng)生成Cookie,并將其轉(zhuǎn)換為Java代碼,以便在自動(dòng)化測(cè)試中使用,下面將介紹如何實(shí)現(xiàn)這一功能,需要的朋友可以參考下
    2024-11-11
  • Java的ArrayList擴(kuò)容源碼解析

    Java的ArrayList擴(kuò)容源碼解析

    這篇文章主要介紹了Java的ArrayList擴(kuò)容源碼解析,通過動(dòng)態(tài)擴(kuò)容,ArrayList能夠在添加元素時(shí)保持高效的性能,擴(kuò)容操作是有一定開銷的,但由于擴(kuò)容的時(shí)間復(fù)雜度為O(n),其中n是當(dāng)前元素個(gè)數(shù),所以平均情況下,每次添加元素的時(shí)間復(fù)雜度仍然是O(1),需要的朋友可以參考下
    2024-01-01
  • 深入淺析Java中Static Class及靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類的不同

    深入淺析Java中Static Class及靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類的不同

    上次有朋友問我,java中的類可以是static嗎?我給他肯定的回答是可以的,在java中我們可以有靜態(tài)實(shí)例變量、靜態(tài)方法、靜態(tài)塊。當(dāng)然類也可以是靜態(tài)的,下面小編整理了些關(guān)于java中的static class相關(guān)資料分享在腳本之家平臺(tái)供大家參考
    2015-11-11
  • Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解

    Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解

    這篇文章主要通過幾個(gè)例題為大家詳細(xì)介紹一些Java動(dòng)態(tài)規(guī)劃中的線性DP,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-11-11

最新評(píng)論