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

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

如何讓 ThreadPoolExecutor 使用雙端隊列?

如何讓 ThreadPoolExecutor 使用雙端隊列?

catspeake 2023-04-19 15:49:05
我需要一個線程池,它可以接收要插入到隊列后面(像往常一樣)或插入隊列前面(對于優先級任務)的任務。然后任務應該正常執行,從隊列的頭部輪詢。ThreadPoolExecutor我意識到這意味著使用 a創建我自己的BlockingDeque方法,但這還不夠......我如何實際告訴線程池調用隊列的offerFirst方法而不是調用隊列的方法offer?
查看完整描述

1 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

您需要將 PriorityBlockingQueue 傳遞給ThreadPoolExecutor,可能使用此構造函數。在下面添加了如何使用比較器初始化 PriorityBlockingQueue 的示例

public ThreadPoolExecutor(int corePoolSize,

? ? ? ? ? ? ? ? ? ? ? ? ? int maximumPoolSize,

? ? ? ? ? ? ? ? ? ? ? ? ? long keepAliveTime,

? ? ? ? ? ? ? ? ? ? ? ? ? TimeUnit unit,

? ? ? ? ? ? ? ? ? ? ? ? ? BlockingQueue<Runnable> workQueue) {

? ? this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,

? ? ? ? ?Executors.defaultThreadFactory(), defaultHandler);

}

編輯 - 將比較器添加到優先級隊列的示例


import java.util.Comparator;

import java.util.concurrent.PriorityBlockingQueue;

import java.util.concurrent.BlockingQueue;


public class PriorityBlockQueueTest {


? ? private static BlockingQueue<PriorityTask> taskQueue = new PriorityBlockingQueue<>(10,

? ? ? ? ? ? new Comparator<PriorityTask>() {

? ? ? ? @Override

? ? ? ? public int compare(PriorityTask o1, PriorityTask o2) {

? ? ? ? ? ? return o2.getData() - o1.getData();

? ? ? ? }

? ? });


? ? public static void main(String arg[]) {

? ? ? ? taskQueue.add(new PriorityTask(2, 10));

? ? ? ? taskQueue.add(new PriorityTask(1, 11));


? ? ? ? System.out.println(taskQueue);

? ? }


? ? private static class PriorityTask implements? Runnable {

? ? ? ? private int priority;

? ? ? ? private int data;

? ? ? ? public PriorityTask(int priority, int data) {

? ? ? ? ? ? this.priority = priority;

? ? ? ? ? ? this.data = data;

? ? ? ? }


? ? ? ? public int getData() {

? ? ? ? ? ? return data;

? ? ? ? }


? ? ? ? public void run() {

? ? ? ? ? ? System.out.println("Running something");

? ? ? ? }


? ? ? ? public String toString() {

? ? ? ? ? ? return "priority: " + priority + " data: " + data;

? ? ? ? }

? ? }

}


查看完整回答
反對 回復 2023-04-19
  • 1 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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