1. 程式人生 > >用Java多執行緒,將任務分步驟處理

用Java多執行緒,將任務分步驟處理

場景簡單,其實就是在做WEB請求的時候,處理的結果需要同時通知到一個第三方伺服器,通知後再把結果返回給客戶端。

現在這個通知只是一個簡單通知,如果直接加在客戶端請求裡面,客戶端會在請求第三方伺服器時堵塞。另外為了客戶端不能超時,所以通知失敗後也不敢多次請求。

這裡可以使用定製任務來解決這個問題,一個客戶端請求後產生一個定製的任務,然後服務後臺進行多執行緒的非同步處理,這樣就會大大減少客戶端的請求時間,同樣最大程度保證這個通知是及時成功給第三方的。

定製任務我們需要一張表,來儲存任務。同時需要多執行緒來執行這些任務。至於誰來開啟這些任務,你可以使用定時器:http://javacui.com/framework/24.html

,也可以使用後臺執行緒。因為定時器已經有示例了,這裡來說下後臺執行緒。

因為是WEB服務,在服務啟動的時候註冊一個啟動監聽:

?
1 2 3 4 5 6 <!-- 初始化系統需要的配置項 開始 --> <listener> <display-name>webListener</display-name> <listener-class>cn.com.vogue.listener.InitListener</listener-class
> </listener> <!-- 初始化系統需要的配置項 結束 -->

然後我們來實現這個監聽處理,主要任務就是開啟一個後臺執行緒,實時查詢是否有需要執行的任務,有的話就分發任務給子執行緒。

同時為了系統的可配性,這個主執行緒是否開啟做一個配置項,載入的時候判斷一下即可:

?
1 isRunRulThread=0
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import cn.com.vogue.task.UrlTask; import cn.com.vogue.utils.ResourceUrl;

相關推薦

Java執行任務步驟處理

場景簡單,其實就是在做WEB請求的時候,處理的結果需要同時通知到一個第三方伺服器,通知後再把結果返回給客戶端。 現在這個通知只是一個簡單通知,如果直接加在客戶端請求裡面,客戶端會在請求第三方伺服器時堵塞。另外為了客戶端不能超時,所以通知失敗後也不敢多次請求。

Java執行Thread和Runnable究竟該哪個

       很久沒寫部落格了,內心有一絲罪惡感。其中一個原因是最近做的一些東西不適合在部落格上公開。        今天抽空來說說Java多執行緒中的一個小話題,也是新人經常會遇到的。起因是我在給新人找培訓資料的時候,在網上看到了很多Thread和Runnable究竟該用

java 執行執行

如果執行緒數量<=核心執行緒數量,那麼直接啟動一個核心執行緒來執行任務,不會放入佇列中。 如果執行緒數量>核心執行緒數,但<=最大執行緒數,並且任務佇列是LinkedBlockingDeque的時候,超過核心執行緒數量的任務會放在任務佇列中排隊。 如果執行緒數量>核心執行緒數,

執行(二)Java執行啟動四個執行兩個執行加一另外兩個執行減一

  public class Test { public static void main(String[] args) { final ShareData data = new ShareData(); for (int i = 0; i < 2; i++) {

java執行實現一個簡單的水池進出水問題

需求: 有一個水池100L,有出水口和入水口,出水口和入水口不能同時開啟,入水口每次注入5L水,出水口每次出4L水,如果池子注滿水,或者池子中沒有水就停止。 使用繼承Thread類的方式編寫出水口,使用實現Runnable方式編寫入水口,執行結果。 package po

Java執行之建立任務執行

Runnable建立執行緒 任務就是物件。為了建立任務,必須首先為任務定義一個類。任務類必須實現Runnable介面。Runnable介面非常簡單,它只包含一個run方法。需要實現這個方法來告訴系統執行緒將如何執行。開發一個任務類的模板如圖29-2a所示。

Java執行之非同步任務——AsyncTask

為什麼需要非同步任務? 1、Android單執行緒模型 2、耗時操作放在非主執行緒中執行AsyncTask為何而生? 1、子執行緒中更新UI 2、封裝、簡化非同步操作構建AsyncTask子類的引數

java執行實現“百度翻譯介面API快速翻譯”

不知道為啥,突然開始想寫部落格,可能是想找個地方寫點東西,煽情文藝的咱寫不了,就寫技術貼好了。不當之處,還希望同志們多多指教,不勝感激。 API準備:自己先到百度去申請一個百度翻譯API,話說百度翻譯還是可以的,每個月200W字元的免費翻譯,不做商業的基本夠用了,感謝百

Java 執行中的任務分解機制-ForkJoinPool詳解

一、任務分解問題和ForkJoinPool簡介        在多執行緒併發程式設計中,有時候會遇到將大任務分解成小任務再併發執行的場景。Java 8新增的ForkJoinPool很好的支援了這個問題

Java執行 ScheduledThreadPoolExecutor 計劃任務類的使用

                前面我們已經學習了使用ThreadPoolExecutor類來實現自動建立和執行執行緒。但是那些執

想了解Java執行此篇文章足矣!

引如果對什麼是執行緒、什麼是程序仍存有疑惑,請先Google之,因為這兩個概念不在本文的範圍之內。用多執行緒只有一個目的,那就是更好的利用cpu的資源,因為所有的多執行緒程式碼都可以用單執行緒來實現。說這個話其實只有一半對,因為反應“多角色”的程式程式碼,最起碼每個角色要給他一個執行緒吧,否則連實際場景都無法

SpringBoot4-spring高階話題-spring aware執行計劃任務條件註解@Conditional

一:Spring Aware 1,點睛      spring的依賴注入的最大亮點就是你所有的Bean對Spring容器的存在是沒有意識的,即你可以將你的容器替換成別的容器,如Google Guice,這時Bean之間的耦合度很低。     但是在實際專案中,你不可避免的要

Java執行除錯如何完成資訊輸出處理

Java多執行緒除錯是很繁瑣的,但是還是需要我們不斷進行相關的學習。下面我們就來看看在Java多執行緒除錯中需要我們注意的相關關鍵點。為了檢視中間結果一般採用將資訊輸出到System.out中。 這樣就產生了一個問題:很多個執行緒的輸出資訊都簡單的輸出到控制檯上,

java執行工具類可用該執行同時處理相同且數量任務

package zrh4; public class ThreadModel {private static int maxThread = 4;protected static int currentThread = 0;private static ThreadMode

java 執行管理執行任務根據優先順序執行 任務超時管理 執行同步執行管理

需求 需要根據優先順序執行任務,有任務不是特別重要,可以稍後執行;需要對正在執行的執行緒做超時監控;有的API依賴任務返回結果,執行緒池執行的時候任務也支援同步任務; 簡單測試 建立一個使用支援優先順序佇列(new PriorityBlockingQu

java執行5.任務執行

將應用程式的工作分解到多個任務中,可以簡化程式的組織結構,提供一種自然的事務邊界來優化錯誤恢復過程,並提供一種自然的並行工作結構來提升併發性 理想情況下,能找出清晰的任務邊界,各個任務之間是相互獨立的,任務不依賴於其他任務的狀態、結果或邊界效應。 在正常的負載下,伺服器應用程式應該同時表現出良好

Java執行-46-實現runnable的方式實現火車票賣票

前面一篇,我們介紹了火車票賣票多執行緒的實現和安全問題,實現方式是寫一個類來繼承Thread類。前面我們介紹了實現多執行緒有兩種方式,第一種是作為Thread類的子類,第二種是實現Runnable,這篇就來寫一個實現Runnable的賣火車票的程式碼。 package thread; pu

Java執行可以分組還能這樣玩!

前面的文章,棧長和大家分享過多執行緒建立的3種方式《實現 Java 多執行緒的 3 種方式》。 但如果執行緒很多的情況下,你知道如何對它們進行分組嗎? 和 Dubbo 的服務分組一樣,Java 可以對相同性質的執行緒進行分組。 來看下執行緒類 Thread 的所有構造方法。 如圖所示,帶有 Thr

實現java執行的3種方式99%人沒用過第3種

實現多執行緒的3種方式 1、繼承Thread類 看jdk原始碼可以發現,Thread類其實是實現了Runnable介面的一個例項,繼承Thread類後需要重寫run方法並通過start方法啟動執行緒。 繼承Thread類耦合性太強了,因為java只能單繼承,所以不利

java最簡單粗暴講解執行還不趕緊上車!

這裡並沒有講什麼新東西,只是把多執行緒一些知識來個總結。大家懂得可以複習複習,還有些童鞋對多執行緒朦朧的可以拿這個做為入門~ 舉個栗子說明啥是多執行緒:玩遊戲,前面一堆怪,每個怪都是一個執行緒,你射了一槍,子彈飛出去了,這顆子彈也是一個執行緒。你開啟你的程序管理,看到你遊戲的後臺程序,這就是程序