在优先级阻塞队列中设置顺序
setup ordering in priority blocking queue
我有一个 PriorityBlockingQueue
,我正在其中添加 SocketHolder
,如下所示。假设此代码为 运行 的当前数据中心为 abc
。我们有三个数据中心 abc
、def
和 pqr
.
private static final PriorityBlockingQueue<SocketHolder> liveQueue = new PriorityBlockingQueue<>();
for (SocketHolder socket : listOfSockets) {
liveQueue.add(socket);
}
现在我需要做的是:
- 我必须在
liveQueue
上设置某种排序,以便所有数据中心为 abc
的 SocketHolder
(代码为 运行 的当前数据中心) ,它们应该在顶部,所以这意味着当我们从这个 liveQueue
检索它时,所有 SocketHolder
和 abc
数据中心应该首先出来,然后是所有其他 SocketHolder
与其他直流电。同样,对于当前数据中心为 pqr
或 def
. 的情况
下面是我的 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);
}
}
我有一个 PriorityBlockingQueue
,我正在其中添加 SocketHolder
,如下所示。假设此代码为 运行 的当前数据中心为 abc
。我们有三个数据中心 abc
、def
和 pqr
.
private static final PriorityBlockingQueue<SocketHolder> liveQueue = new PriorityBlockingQueue<>();
for (SocketHolder socket : listOfSockets) {
liveQueue.add(socket);
}
现在我需要做的是:
- 我必须在
liveQueue
上设置某种排序,以便所有数据中心为abc
的SocketHolder
(代码为 运行 的当前数据中心) ,它们应该在顶部,所以这意味着当我们从这个liveQueue
检索它时,所有SocketHolder
和abc
数据中心应该首先出来,然后是所有其他SocketHolder
与其他直流电。同样,对于当前数据中心为pqr
或def
. 的情况
下面是我的 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);
}
}