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

setup ordering in priority blocking queue

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

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

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

现在我需要做的是:

下面是我的 SocketHolder class 实现了 Comparable 接口,但我混淆了我在 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);
   }
}