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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創(chuàng)建線程已經(jīng)返回后如何在 Java 線程處超時?

創(chuàng)建線程已經(jīng)返回后如何在 Java 線程處超時?

元芳怎么了 2022-05-21 13:46:47
我正在嘗試編寫一個方法來創(chuàng)建一個線程,該線程在該方法已經(jīng)返回后可以工作。我需要這個線程在一定時間后超時。我有一個可行的解決方案,但我不確定這是否是最好的方法。  new Thread(() -> {        ExecutorService executor = Executors.newSingleThreadExecutor();        Future<Void> future = executor.submit(new Callable() {            public Void call() throws Exception {              workThatTakesALongTime();        });        try {            future.get(timeoutMillis, TimeUnit.MILLISECONDS);        } catch (Exception e) {            LOGGER.error("Exception from timeout.", e);        }    }).start();有沒有更好的方法來做到這一點而不使用線程中的 ExecutorService ?
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗 獲得超3個贊

請參閱ExecutorService.invokeAny()允許您傳遞超時值的方法。



查看完整回答
反對 回復(fù) 2022-05-21
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗 獲得超9個贊

有多種方法可以實現(xiàn)這一點。正如您所做的那樣,一種方法是使用 ExecutorService。一個更簡單的方法是創(chuàng)建一個新線程和一個隊列,如果每隔幾秒就有一些東西,線程就會從中查找。一個例子是這樣的:


Queue<Integer> tasks = new ConcurrentLinkedQueue<>();


new Thread(){

    public void run() throws Exception {

        while(true){

            Integer task = null;


            if((task = tasks.poll()) != null){

                // do whatever you want

            }


            Thread.sleep(1000L); // we probably do not have to check for a change that often

        }

    }

}.start();



// add tasks

tasks.add(0);


查看完整回答
反對 回復(fù) 2022-05-21
  • 2 回答
  • 0 關(guān)注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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