国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

鄭州網(wǎng)站推廣排名公司浙江關(guān)鍵詞優(yōu)化

鄭州網(wǎng)站推廣排名公司,浙江關(guān)鍵詞優(yōu)化,dede網(wǎng)站后臺(tái)模板,江門企業(yè)模板建站在開發(fā)過程中,我們難免會(huì)因?yàn)樾阅?、?shí)時(shí)響應(yīng)等,需要異步處理的一些事務(wù),并且在子線程中有時(shí)我們還需要獲取主線程相關(guān)的參數(shù)。下面有若干方案可以實(shí)現(xiàn)上述場(chǎng)景,但會(huì)出現(xiàn)一定的問題。 場(chǎng)景1-基礎(chǔ)場(chǎng)景 在主線程中開啟子線程&#x…

在開發(fā)過程中,我們難免會(huì)因?yàn)樾阅?、?shí)時(shí)響應(yīng)等,需要異步處理的一些事務(wù),并且在子線程中有時(shí)我們還需要獲取主線程相關(guān)的參數(shù)。下面有若干方案可以實(shí)現(xiàn)上述場(chǎng)景,但會(huì)出現(xiàn)一定的問題。

場(chǎng)景1-基礎(chǔ)場(chǎng)景

在主線程中開啟子線程,在子線程中獲取主線程的參數(shù)。
重點(diǎn):子線程中邏輯處理時(shí)間較短,在主線程結(jié)束前獲取主線程的參數(shù)。

package com.lihao.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;/*** @author lihao*/
@RestController
@RequestMapping("/test1")
public class Test1 {/*** 自定義線程池*/private ExecutorService executor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(),Runtime.getRuntime().availableProcessors(),5,TimeUnit.MINUTES,new LinkedBlockingQueue<>(100),Thread::new,new ThreadPoolExecutor.AbortPolicy());@GetMapping("/asyncTest")public String asyncTest(HttpServletRequest request) {request.setAttribute("key1","value1");// 異步處理任務(wù)executor.submit(() -> doExe(request));return "OK";}public void doExe(HttpServletRequest request){System.out.println("值:" + request.getAttribute("key1"));}
}

執(zhí)行結(jié)果:

值:value1

我們可以正常拿到主線程的參數(shù)。

場(chǎng)景2-場(chǎng)景1的變種

在主線程中開啟子線程,在子線程中獲取主線程的參數(shù)。
重點(diǎn):子線程在執(zhí)行一段時(shí)間后再獲取主線程的參數(shù),這個(gè)時(shí)候主線程已執(zhí)行完成了。

@GetMapping("/asyncTest")public String asyncTest(HttpServletRequest request) {request.setAttribute("key1","value1");// 異步處理任務(wù)executor.submit(() -> doExe(request,1000L));return "OK";}public void doExe(HttpServletRequest request,long sleepTime){try {Thread.sleep(sleepTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("值:" + request.getAttribute("key1"));}

執(zhí)行結(jié)果:

值:null

由于子線程sleep了一秒,這個(gè)時(shí)候主線程已經(jīng)執(zhí)行完成,子線程如果想繼續(xù)獲取主線程的參數(shù),就會(huì)拿不到值。

場(chǎng)景3-場(chǎng)景1的完善

在主線程中開啟子線程,在子線程中獲取主線程的參數(shù)。
重點(diǎn):子線程在執(zhí)行一段時(shí)間后再獲取主線程的參數(shù),主線程需要等待子線程執(zhí)行完成后,再結(jié)束。

@GetMapping("/asyncTest")public String asyncTest(HttpServletRequest request) {request.setAttribute("key1","value1");// 異步處理任務(wù)Future<?> future = executor.submit(() -> doExe(request, 10000L));try {future.get();} catch (InterruptedException | ExecutionException e) {throw new RuntimeException(e);}return "OK";}public void doExe(HttpServletRequest request,long sleepTime){try {Thread.sleep(sleepTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("值:" + request.getAttribute("key1"));}

雖然子線程執(zhí)行時(shí)間較長(zhǎng),但仍可以獲取主線程的參數(shù),主線程在子線程執(zhí)行完成后再結(jié)束。
主要技術(shù):通過future.get();來使主線程阻塞。
缺點(diǎn):主線程等待時(shí)間較長(zhǎng),消息無法實(shí)時(shí)返回,需要等待子線程執(zhí)行完成后再返回。

場(chǎng)景4-場(chǎng)景1、2、3的優(yōu)化

在主線程中開啟子線程,在子線程中獲取主線程的參數(shù)。
重點(diǎn):子線程在執(zhí)行一段時(shí)間后再獲取主線程的參數(shù),主線程無需要等待子線程執(zhí)行完成,可立即結(jié)束。

    @GetMapping("/asyncTest")public String asyncTest(HttpServletRequest request) {request.setAttribute("key1","value1");// 開啟異步AsyncContext asyncContext = request.startAsync();executor.submit(() -> doExe(asyncContext,request, 10000L));return "OK";}public void doExe(AsyncContext asyncContext,HttpServletRequest request,long sleepTime){try {Thread.sleep(sleepTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("值:" + request.getAttribute("key1"));asyncContext.complete();}

雖然子線程執(zhí)行時(shí)間較長(zhǎng),但仍可以獲取主線程的參數(shù),主線程無需等待子線程執(zhí)行完成,可立即返回。

核心技術(shù)點(diǎn):

  • 開啟異步 AsyncContext asyncContext = request.startAsync();
  • 子線程執(zhí)行完后調(diào)用: asyncContext.complete();

具體原理:可閱讀源碼。

彩蛋

場(chǎng)景4在部分框架下失效,如項(xiàng)目中引用Spring- Security框架等,會(huì)導(dǎo)致主線程開啟子線程后阻塞,具體原因待分析。其他場(chǎng)景下可正常使用。

http://m.aloenet.com.cn/news/36069.html

相關(guān)文章:

  • 萬(wàn)網(wǎng)網(wǎng)站建設(shè)購(gòu)買過程汽車推廣軟文
  • 怎么自己的電腦做網(wǎng)站服務(wù)器百度網(wǎng)站是什么
  • 阿里巴巴怎么做公司網(wǎng)站我為什么不建議年輕人做銷售
  • 網(wǎng)站建設(shè) 資訊動(dòng)態(tài)電商軟文范例100字
  • 網(wǎng)站文化建設(shè)軟文新聞發(fā)布網(wǎng)站
  • 徐州企業(yè)網(wǎng)站設(shè)計(jì)免費(fèi)的網(wǎng)站推廣在線推廣
  • 歐美設(shè)計(jì)網(wǎng)站推薦百度推廣賬號(hào)怎么申請(qǐng)
  • 如何寫好網(wǎng)站開發(fā)技術(shù)文檔頭條新聞今日頭條官方版本
  • 網(wǎng)站建設(shè)本科畢業(yè)設(shè)計(jì)論文鄭州網(wǎng)站推廣排名公司
  • 發(fā)果怎么做視頻網(wǎng)站四川省最新疫情情況
  • 一個(gè)網(wǎng)站怎么做鏡像站熱點(diǎn)事件
  • wordpress播放器源碼徐州seo外包
  • 動(dòng)態(tài)網(wǎng)站建設(shè)簡(jiǎn)介谷歌排名網(wǎng)站優(yōu)化
  • 廣西專業(yè)做網(wǎng)站的公司軟件排名工具
  • 網(wǎng)站建設(shè)技術(shù)服務(wù)清單網(wǎng)絡(luò)營(yíng)銷有哪些
  • 企業(yè)介紹微網(wǎng)站怎么做短視頻營(yíng)銷推廣策略
  • c 網(wǎng)站開發(fā)框架百度小說風(fēng)云榜今天
  • 企業(yè)網(wǎng)站建設(shè)合同書模板可以引流推廣的app
  • 云瓣科技做網(wǎng)站本地網(wǎng)絡(luò)seo公司
  • 網(wǎng)站后臺(tái)登陸代碼百度關(guān)鍵詞seo排名
  • 用js做跳轉(zhuǎn)到其他網(wǎng)站優(yōu)化公司怎么優(yōu)化網(wǎng)站的
  • 大場(chǎng)網(wǎng)站建設(shè)seo最好的工具
  • 國(guó)外做的比較好看的網(wǎng)站2022年度最火關(guān)鍵詞
  • 西安網(wǎng)站建設(shè)開發(fā)查派谷歌seo排名公司
  • 依波手表價(jià)格 官方網(wǎng)站360搜索優(yōu)化
  • 網(wǎng)站建設(shè)客戶告知書長(zhǎng)春網(wǎng)站優(yōu)化團(tuán)隊(duì)
  • 鄭州區(qū)塊鏈數(shù)字錢包網(wǎng)站開發(fā)多少錢廣州網(wǎng)頁(yè)制作
  • 網(wǎng)站管理建設(shè)的總結(jié)抖音代運(yùn)營(yíng)
  • 做定制校服的網(wǎng)站煙臺(tái)seo快速排名
  • 網(wǎng)站開發(fā)服務(wù)費(fèi)記賬個(gè)人網(wǎng)站制作源代碼