Platon, верно вы подметили - зря не посмотрел исходник. Удивлен, признаться, не ожидал увидеть такой контент метода ivg, заменил попробовал и не почувствовал. Короче, прогу модифицировал - будем тестить синхронизированный и не синхронизированный метод add():
| Код | long len = 500000; List<Integer> usualList = new ArrayList<Integer>(); List<Integer> synchList = Collections.synchronizedList(usualList);
while (true) { add2ListAvgTimeout("ArrayList", usualList, len, 1); add2ListAvgTimeout("synch ArrayList", synchList, len, 1); //add2ListAvgTimeout("synch ArrayList", usualList, len, 1); } }
public static void add2ListAvgTimeout(String name, List<Integer> list, long len, int iter) { long[] res = new long[iter]; for (int i = 0; i < iter; i++) { System.gc(); res[i] = add2ListTimeout(list, len); }
long s = 0; for (long i : res) { s += i; } float rez = s/iter; System.out.println(name + ": " + rez + " ms"); } public static long add2ListTimeout(List<Integer> list, long len) { long startTime = System.currentTimeMillis(); for (int i = 0; i < len; i++) { list.add(32768); } long endTime = System.currentTimeMillis(); return endTime - startTime; }
|
Результаты:
| Код | ArrayList: 375.0 ms synch ArrayList: 266.0 ms ArrayList: 125.0 ms synch ArrayList: 156.0 ms ArrayList: 141.0 ms synch ArrayList: 94.0 ms ArrayList: 203.0 ms synch ArrayList: 47.0 ms ArrayList: 47.0 ms synch ArrayList: 32.0 ms ArrayList: 171.0 ms synch ArrayList: 46.0 ms ArrayList: 32.0 ms synch ArrayList: 47.0 ms ArrayList: 31.0 ms synch ArrayList: 281.0 ms ArrayList: 32.0 ms synch ArrayList: 31.0 ms
|
После замены строки 7 на 8:
| Код | ArrayList: 453.0 ms synch ArrayList: 343.0 ms ArrayList: 156.0 ms synch ArrayList: 156.0 ms ArrayList: 156.0 ms synch ArrayList: 94.0 ms ArrayList: 219.0 ms synch ArrayList: 32.0 ms ArrayList: 31.0 ms synch ArrayList: 15.0 ms ArrayList: 172.0 ms synch ArrayList: 31.0 ms ArrayList: 31.0 ms synch ArrayList: 32.0 ms ArrayList: 31.0 ms synch ArrayList: 265.0 ms ArrayList: 31.0 ms synch ArrayList: 31.0 ms ArrayList: 31.0 ms synch ArrayList: 31.0 ms ArrayList: 46.0 ms synch ArrayList: 31.0 ms ArrayList: 375.0 ms
|
Почему метод add() ArrayList работает медленнее чем его синхронизированный аналог ? |