java - 在优先级阻塞队列中设置顺序

标签 java algorithm priority-queue comparable blockingqueue

我有一个 PriorityBlockingQueue,我在其中添加了 SocketHolder,如下所示。假设当前运行此代码的数据中心是 abc。我们有三个数据中心 abcdefpqr

private static final PriorityBlockingQueue<SocketHolder> liveQueue = new PriorityBlockingQueue<>();

for (SocketHolder socket : listOfSockets) {
    liveQueue.add(socket);
}

现在我需要做的是:

  • 我必须在 liveQueue 上设置某种排序,以便所有数据中心为 abcSocketHolder(这是代码所在的当前数据中心正在运行),它们应该在顶部,这意味着当我们从这个 liveQueue 检索它时,所有带有 abc 数据中心的 SocketHolder 应该首先出来然后在所有其他 SocketHolder 与其他 dc 上。对于当前数据中心是 pqrdef 的情况也是如此。

下面是我的 SocketHolder 类,它实现了 Comparable 接口(interface),但我混淆了我在 compareTo 方法中需要做的事情,所以在 liveQueue< 的顶部(在向其添加元素之后)我们拥有所有 SocketHolder,其数据中心是当前数据中心,然后是我没有优先级的其他数据中心。

public final class SocketHolder implements Comparable<SocketHolder> {
  private final Socket socket;
  private final Datacenter dc;
  private final Context context;

  public SocketHolder(Socket socket, Datacenter dc, Context context) {
    super();
    this.socket = socket;
    this.dc = dc;
    this.context = context;
  }

  @Override
  public int compareTo(SocketHolder o) {
    // String currentDC = Utils.CURRENT_DATACENTER.get().name();
    return 0;
  }
}

最佳答案

实时数据中心将被分配优先级 1,其他数据中心优先级为 2。队列将首先处理最低优先级。

public final class SocketHolder implements Comparable<SocketHolder> {
   private final Socket socket;
   private final Datacenter dc;
   private final Context context;
   private final int priority;

   public SocketHolder(Socket socket, Datacenter dc, Context context) {
      super();
      this.socket = socket;
      this.dc = dc;
      this.context = context;
      this.priority = this.dc.getName().equals(Utils.CURRENT_DATACENTER.get().name()) ? 1 : 2;
   }

   @Override
   public int compareTo(SocketHolder o) {
       return Integer.compare(this.priority, o.priority);
   }
}

关于java - 在优先级阻塞队列中设置顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49203619/

相关文章:

java - 给定的 html 文件只提取有意义的文本

java - JDBC 连接在同事的计算机上运行,​​而不是在我的计算机上

java - 错误 "Required:String Found:String?"Kotlin 和 Android Studio

algorithm - 这种 BFS/DFS/IDDFS 类算法有名称吗?

algorithm - 快速二维模式匹配

java - ArrayList.sort() 与 PriorityQueue

multithreading - 优先级队列的现实示例是什么?

JavaFX ScrollPane的水平滚动条隐藏内容

c# - MSDN 上 SimplePriorityQueue 示例中的严重错误

c++ - 最长回文子串递归解