@@ -17,18 +17,21 @@ public TimerTaskList(AtomicInteger taskCounter) {
17
17
this .taskCounter = taskCounter ;
18
18
}
19
19
20
- public synchronized void add (TimerTaskEntry timerTaskEntry ) {
20
+ public void add (TimerTaskEntry timerTaskEntry ) {
21
21
boolean done = false ;
22
22
while (!done ) {
23
- if (timerTaskEntry .list == null ) {
24
- TimerTaskEntry tail = root .prev ;
25
- timerTaskEntry .next = root ;
26
- timerTaskEntry .prev = tail ;
27
- timerTaskEntry .list = this ;
28
- tail .next = timerTaskEntry ;
29
- root .prev = timerTaskEntry ;
30
- taskCounter .incrementAndGet ();
31
- done = true ;
23
+ timerTaskEntry .remove ();
24
+ synchronized (this ) {
25
+ if (timerTaskEntry .list == null ) {
26
+ TimerTaskEntry tail = root .prev ;
27
+ timerTaskEntry .next = root ;
28
+ timerTaskEntry .prev = tail ;
29
+ timerTaskEntry .list = this ;
30
+ tail .next = timerTaskEntry ;
31
+ root .prev = timerTaskEntry ;
32
+ taskCounter .incrementAndGet ();
33
+ done = true ;
34
+ }
32
35
}
33
36
}
34
37
}
@@ -42,14 +45,16 @@ public long getExpiration() {
42
45
return expiration .get ();
43
46
}
44
47
45
- public synchronized void remove (TimerTaskEntry timerTaskEntry ) {
46
- if (timerTaskEntry .list .equals (this )) {
47
- timerTaskEntry .next .prev = timerTaskEntry .prev ;
48
- timerTaskEntry .prev .next = timerTaskEntry .next ;
49
- timerTaskEntry .next = null ;
50
- timerTaskEntry .prev = null ;
51
- timerTaskEntry .list = null ;
52
- taskCounter .decrementAndGet ();
48
+ public void remove (TimerTaskEntry timerTaskEntry ) {
49
+ synchronized (this ) {
50
+ if (timerTaskEntry .list .equals (this )) {
51
+ timerTaskEntry .next .prev = timerTaskEntry .prev ;
52
+ timerTaskEntry .prev .next = timerTaskEntry .next ;
53
+ timerTaskEntry .next = null ;
54
+ timerTaskEntry .prev = null ;
55
+ timerTaskEntry .list = null ;
56
+ taskCounter .decrementAndGet ();
57
+ }
53
58
}
54
59
}
55
60
0 commit comments