想要验证的东西
timertask里面只要while条件一直成立,那么这个timertask就会一直执行下去,timer也一直不会被清空。
代码1
package com.company;
import java.util.*;
public class Main2 {
private Timer overallTimer;
private void test() {
Object lock = new Object();
overallTimer = new Timer();
List<Integer> testIntegerList = new ArrayList<>();
testIntegerList.add(1);
testIntegerList.add(2);
testIntegerList.add(3);
overallTimer.schedule(new TimerTask() {
@Override
public void run() {
synchronized (lock) {
Iterator<Integer> it = testIntegerList.iterator();
while(it.hasNext()) {
Integer currentInteger = it.next();
System.out.println(currentInteger);
}
}
}
}, 2000, 2000);
}
public static void main(String[] args) {
Main2 main2 = new Main2();
main2.test();
System.out.println(main2.overallTimer == null);
}
}
Console打印
false
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
...
代码2
package com.company;
import java.util.*;
public class Main2 {
private Timer overallTimer;
private void test() {
Object lock = new Object();
overallTimer = new Timer();
List<Integer> testIntegerList = new ArrayList<>();
testIntegerList.add(1);
testIntegerList.add(2);
testIntegerList.add(3);
testIntegerList.add(4);
testIntegerList.add(5);
overallTimer.schedule(new TimerTask() {
@Override
public void run() {
synchronized (lock) {
Iterator<Integer> it = testIntegerList.iterator();
while(it.hasNext()) {
Integer currentInteger = it.next();
System.out.println(currentInteger);
it.remove();
}
}
}
}, 2000, 2000);
}
public static void main(String[] args) {
Main2 main2 = new Main2();
main2.test();
System.out.println(main2.overallTimer == null);
}
}
Console打印
false
1
2
3
4
5