亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

創建線程已經返回后如何在 Java 線程處超時?

創建線程已經返回后如何在 Java 線程處超時?

神不在的星期二 2022-05-21 18:38:06
我正在嘗試編寫一個方法來創建一個線程,該線程在該方法已經返回后可以工作。我需要這個線程在一定時間后超時。我有一個可行的解決方案,但我不確定這是否是最好的方法。  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 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

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



查看完整回答
反對 回復 2022-05-21
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

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


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);


查看完整回答
反對 回復 2022-05-21
  • 2 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號