有域名如何做免费网站,wordpress和织梦百度收录,视频网站开发的论文,php网站开发实战开发delayqueue因此#xff0c;我正在考虑构建一个简单的对象缓存#xff0c;该缓存在给定时间后会使对象过期。 显而易见的机制是使用Java并发包中的DelayedQueue类。 但是我想知道是否有可能在将对象添加到队列后更新延迟。 看一下Delayed接口#xff0c;似乎没有充分的理由不… delayqueue 因此我正在考虑构建一个简单的对象缓存该缓存在给定时间后会使对象过期。 显而易见的机制是使用Java并发包中的DelayedQueue类。 但是我想知道是否有可能在将对象添加到队列后更新延迟。 看一下Delayed接口似乎没有充分的理由不在文档中所以我认为是时候进行实验了。 因此首先您需要创建一个Delayed实例这是一个非常简单的实现通过切换标志您基本上可以反转列表中的超时顺序。 并添加适当的偏移量以便按正确的顺序进行操作 static int COUNT100;class DelayedSwap implements Delayed, ComparableDelayed {int index 0;volatile boolean swap false;long starttime;public DelayedSwap(int index, long starttime) {super();this.index index;this.starttime starttime;}private long getDelay() {return (swap ? starttime (2*COUNT - index) * 100 :starttime index * 100) - System.currentTimeMillis();}public String toString(){return index swapped swap delay getDelay();}Overridepublic long getDelay(TimeUnit unit) {return unit.convert(getDelay(), TimeUnit.MILLISECONDS);}Overridepublic int compareTo(Delayed delayed) {if (delayed this)return 0;return (int)(getDelay(TimeUnit.MILLISECONDS) - delayed.getDelay(TimeUnit.MILLISECONDS));}} 因此为了测试这一点我创建了一个方法该方法将创建一堆DelayedSwap对象并在处理列表的一半过程中切换标志从而更改到期顺序。 public static void main(String[] args) throws InterruptedException {long start System.currentTimeMillis();final Listdelayed new ArrayList();for (int i 1; i COUNT; i) {delayed.add(new DelayedSwap(i, start));}final DelayQueue dq new DelayQueue();dq.addAll(delayed);new Thread(new Runnable() {Overridepublic void run() {try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {}for (DelayedSwap d : delayed) {d.swap true;}}}).start();while (!dq.isEmpty()) {System.out.println(dq.take());}} 因此我期望的是按正确的顺序写出元素1-50但是在交换元素之后它们以任意顺序出现与请求延迟时间相去甚远。 1 swapped false delay -19
2 swapped false delay -4
3 swapped false delay -4
4 swapped false delay -4
5 swapped false delay -4
6 swapped false delay -4
7 swapped false delay -4
8 swapped false delay -4
9 swapped false delay -4
10 swapped false delay -4
11 swapped false delay -4
12 swapped false delay -4
13 swapped false delay -4
14 swapped false delay -4
15 swapped false delay -4
16 swapped false delay -4
17 swapped false delay -4
18 swapped false delay -4
19 swapped false delay -4
20 swapped false delay -4
21 swapped false delay -4
22 swapped false delay -4
23 swapped false delay -4
24 swapped false delay -4
25 swapped false delay -4
26 swapped false delay -4
27 swapped false delay -4
28 swapped false delay -4
29 swapped false delay -4
30 swapped false delay -4
31 swapped false delay -4
32 swapped false delay -4
33 swapped false delay -4
34 swapped false delay -4
35 swapped false delay -4
36 swapped false delay -4
37 swapped false delay -4
38 swapped false delay -4
39 swapped false delay -5
40 swapped false delay -4
41 swapped false delay -4
42 swapped false delay -5
43 swapped false delay -4
44 swapped false delay -5
45 swapped false delay -5
46 swapped false delay -5
47 swapped false delay -5
48 swapped false delay -5
49 swapped false delay -5
50 swapped false delay -5
51 swapped true delay -6
94 swapped true delay -4306
96 swapped true delay -4506
87 swapped true delay -3606
91 swapped true delay -4006
97 swapped true delay -4606
95 swapped true delay -4406
98 swapped true delay -4706
92 swapped true delay -4106
82 swapped true delay -3106
80 swapped true delay -2906
90 swapped true delay -3906
93 swapped true delay -4206
74 swapped true delay -2306
99 swapped true delay -4806
70 swapped true delay -1906
69 swapped true delay -1806
66 swapped true delay -1506
83 swapped true delay -3206
62 swapped true delay -1107
61 swapped true delay -1007
58 swapped true delay -707
71 swapped true delay -2007
89 swapped true delay -3807
85 swapped true delay -3407
78 swapped true delay -2707
86 swapped true delay -3507
81 swapped true delay -3007
88 swapped true delay -3707
84 swapped true delay -3307
79 swapped true delay -2807
76 swapped true delay -2507
72 swapped true delay -2107
68 swapped true delay -1707
65 swapped true delay -1407
60 swapped true delay -907
57 swapped true delay -608
55 swapped true delay -408
75 swapped true delay -2408
77 swapped true delay -2608
73 swapped true delay -2208
63 swapped true delay -1208
67 swapped true delay -1608
64 swapped true delay -1308
59 swapped true delay -808
56 swapped true delay -508
54 swapped true delay -308
53 swapped true delay -208
52 swapped true delay -108
Process exited with exit code 0. 因此诀窍是当您知道要修改时请先删除延迟然后再将元素重新添加到队列中。 // Replacement swap loopfor (DelayedSwap d : delayed) {if (dq.remove(d)){d.swap true;dq.add(d);}} 此运行产生了一组更合理的结果 1 swapped false delay -4
2 swapped false delay -8
3 swapped false delay -14
4 swapped false delay -8
5 swapped false delay -4
6 swapped false delay -4
7 swapped false delay -4
8 swapped false delay -4
9 swapped false delay -4
10 swapped false delay -4
11 swapped false delay -4
12 swapped false delay -4
13 swapped false delay -4
14 swapped false delay -4
15 swapped false delay -4
16 swapped false delay -4
17 swapped false delay -4
18 swapped false delay -8
19 swapped false delay -4
20 swapped false delay -4
21 swapped false delay -4
22 swapped false delay -4
23 swapped false delay -4
24 swapped false delay -4
25 swapped false delay -4
26 swapped false delay -4
27 swapped false delay -4
28 swapped false delay -4
29 swapped false delay -4
30 swapped false delay -4
31 swapped false delay -4
32 swapped false delay -4
33 swapped false delay -4
34 swapped false delay -4
35 swapped false delay -4
36 swapped false delay -4
37 swapped false delay -4
38 swapped false delay -4
39 swapped false delay -5
40 swapped false delay -5
41 swapped false delay -5
42 swapped false delay -4
43 swapped false delay -4
44 swapped false delay -5
45 swapped false delay -5
46 swapped false delay -5
47 swapped false delay -5
48 swapped false delay -5
49 swapped false delay -5
50 swapped false delay -5
99 swapped true delay -5
98 swapped true delay -5
97 swapped true delay -11
96 swapped true delay -1
95 swapped true delay -5
94 swapped true delay -9
93 swapped true delay -5
92 swapped true delay -5
91 swapped true delay -5
90 swapped true delay -5
89 swapped true delay -5
88 swapped true delay -5
87 swapped true delay -5
86 swapped true delay -5
85 swapped true delay -5
84 swapped true delay -5
83 swapped true delay -5
82 swapped true delay -5
81 swapped true delay -5
80 swapped true delay -5
79 swapped true delay -5
78 swapped true delay -5
77 swapped true delay -5
76 swapped true delay -5
75 swapped true delay -5
74 swapped true delay -5
73 swapped true delay -5
72 swapped true delay -6
71 swapped true delay -5
70 swapped true delay -5
69 swapped true delay -5
68 swapped true delay -5
67 swapped true delay -5
66 swapped true delay -5
65 swapped true delay -5
64 swapped true delay -5
63 swapped true delay -6
62 swapped true delay -5
61 swapped true delay -6
60 swapped true delay -6
59 swapped true delay -6
58 swapped true delay -6
57 swapped true delay -6
56 swapped true delay -6
55 swapped true delay -6
54 swapped true delay -6
53 swapped true delay -6
52 swapped true delay -6
51 swapped true delay -6
Process exited with exit code 0. 我不认为这是对象本身的错误因为您不希望在键更改时HashTable可以命令它的自身但是我对此行为感到有些惊讶。 祝您编程愉快别忘了分享 参考在Gerard Davison博客博客中我们的JCG合作伙伴 Gerard Davison在DelayQueue中更改了延迟从而更改了顺序 。 翻译自: https://www.javacodegeeks.com/2012/09/changing-delay-and-hence-order-in.htmldelayqueue