亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

java delayqueue怎么實現任務延時

小億
95
2023-11-09 09:17:07
欄目: 編程語言

要實現任務延時可以使用Java的DelayQueue類。DelayQueue是一個無界阻塞隊列,其中的元素只能在其到期時才能從隊列中取出。可以使用Delayed接口表示延時任務,該接口包含了一個getDelay(TimeUnit unit)方法,用于獲取任務的剩余延時時間。

下面是一個使用DelayQueue實現任務延時的示例代碼:

import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

// 延時任務類
class DelayedTask implements Delayed {
    private String taskName;
    private long delayTime;

    public DelayedTask(String taskName, long delayTime) {
        this.taskName = taskName;
        this.delayTime = System.currentTimeMillis() + delayTime;
    }

    // 獲取任務的剩余延時時間
    @Override
    public long getDelay(TimeUnit unit) {
        long diff = delayTime - System.currentTimeMillis();
        return unit.convert(diff, TimeUnit.MILLISECONDS);
    }

    // 比較任務的優先級
    @Override
    public int compareTo(Delayed other) {
        if (this.delayTime < ((DelayedTask) other).delayTime) {
            return -1;
        } else if (this.delayTime > ((DelayedTask) other).delayTime) {
            return 1;
        } else {
            return 0;
        }
    }

    @Override
    public String toString() {
        return taskName;
    }
}

public class DelayQueueExample {
    public static void main(String[] args) {
        DelayQueue<DelayedTask> delayQueue = new DelayQueue<>();

        // 添加延時任務到隊列
        delayQueue.offer(new DelayedTask("Task 1", 1000));
        delayQueue.offer(new DelayedTask("Task 2", 2000));
        delayQueue.offer(new DelayedTask("Task 3", 3000));

        // 消費延時任務
        while (!delayQueue.isEmpty()) {
            try {
                DelayedTask task = delayQueue.take();
                System.out.println("Consuming task: " + task);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

在上面的示例代碼中,我們先定義了一個DelayedTask類,該類實現了Delayed接口。然后在main()方法中創建一個DelayQueue對象,并添加了三個延時任務到隊列中。最后使用take()方法從隊列中取出并消費延時任務。注意,take()方法是一個阻塞方法,如果隊列為空,則會阻塞等待直到有任務可取。

運行上述代碼,可以看到每個任務都會根據其延時時間依次被消費。

0
阿鲁科尔沁旗| 明星| 依兰县| 卢龙县| 杭锦旗| 乐平市| 黔江区| 舞阳县| 万盛区| 定结县| 北海市| 醴陵市| 霸州市| 若尔盖县| 桂平市| 松江区| 宁夏| 宁波市| 商南县| 罗源县| 永靖县| 竹山县| 乡城县| 昌黎县| 鄂伦春自治旗| 贵州省| 汉阴县| 玉门市| 道真| 台南市| 吉木萨尔县| 阜平县| 曲麻莱县| 甘谷县| 剑阁县| 嘉禾县| 涟水县| 中阳县| 雷波县| 昔阳县| 普宁市|