第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在給定的秒數(shù)后中斷 HTTP 請(qǐng)求

在給定的秒數(shù)后中斷 HTTP 請(qǐng)求

一只名叫tom的貓 2022-09-28 16:40:24
我使用Java 1.8,刪除向?qū)?.3.5和搖擺不定的詞形變化1.0.13作為我的API。我有一個(gè)方法,它接受HTTP請(qǐng)求,延遲20秒,然后返回200狀態(tài)代碼響應(yīng):public ResponseContext delayBy20Seconds(RequestContext context) {    ResponseContext response = new ResponseContext().contentType(MediaType.APPLICATION_JSON_TYPE);    Thread.sleep(20000);    response.status(Response.Status.OK);    return response;}假設(shè)我想返回一個(gè) 400 狀態(tài)代碼,如果操作(在本例中為 20 秒)花費(fèi)的時(shí)間超過 15 秒。我將如何實(shí)現(xiàn)這一點(diǎn)?
查看完整描述

2 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

無需其他庫即可執(zhí)行此操作的一種方法是使用包。取消像這樣長時(shí)間運(yùn)行的任務(wù)的最可靠方法是在單獨(dú)的線程中運(yùn)行它。java.util.concurrent


import java.util.concurrent.*;


...


private ExecutorService exec = Executors.newSingleThreadExecutor();

public ResponseContext delayBy20Seconds(RequestContext context) {

    Callable<ResponseContext> task = new Callable<ResponseContext>() {

        @Override

        public ResponseContext call() throws Exception {

            Thread.sleep(20000);

            return new ResponseContext().contentType(MediaType.APPLICATION_JSON_TYPE);

        }

    };

    List<Callable<ResponseContext>> tasks = new ArrayList<>();

    tasks.add(task);

    List<Future<ResponseContext>> done = exec.invokeAll(tasks, 15, TimeUnit.SECONDS);

    Future<ResponseContext> task1 = done.get(0);

    if (task1.isCancelled()) {

        return some Error Response;

    }

    return task1.get();

}

您不應(yīng)該是靜態(tài)的,因?yàn)槟幌M诖颂囟ㄓ猛镜木€程之間共享它。ExecutorService


實(shí)現(xiàn)是完成長時(shí)間運(yùn)行的任務(wù)的工作的地方。在電話中應(yīng)該很明顯,我們告訴它我們?cè)敢獾却嗌佟7祷氐钠谪浟斜韺⑹冀K包含與任務(wù)列表一樣多的元素,因此無需檢查其空虛。我們只需要檢查任務(wù)是否完成。Callable<ResponseContext>exec.invokeAll


查看完整回答
反對(duì) 回復(fù) 2022-09-28
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

你可以使用像谷歌番石榴庫中的時(shí)間限制器這樣的東西。這允許您將可調(diào)用項(xiàng)包裝在可使用超時(shí)調(diào)用的操作中。如果可調(diào)用對(duì)象沒有及時(shí)完成操作,它將拋出您可以捕獲并返回 400 響應(yīng)的 a。TimeoutException


例如:


TimeLimiter timeLimiter = new SimpleTimeLimiter();

try {

  String result = timeLimiter.callWithTimeout(

                () -> doSomeHeavyWeightOperation(), 15, TimeUnit.SECONDS);

} catch (TimeoutException e) {

  // return 400

}


查看完整回答
反對(duì) 回復(fù) 2022-09-28
  • 2 回答
  • 0 關(guān)注
  • 99 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)