Изучение Java, использование ключевого слова synchronized

поэтому я тестировал с ключевым словом synchronized. Вот пример, который я пробовал:

public class MyTest {
    static int i = 0;
    public static void main(String[] args) {
        new Thread(t1).start();
        new Thread(t2).start();
    }

    private static void countMe(String name){
        i++;
        System.out.println("Current Counter is: " + i + ", updated by: " + name);
    }

    private static Runnable t1 = new Runnable() {
        public void run() {
            try{
                for(int i=0; i<5; i++){
                    countMe("t1");
                }
            } catch (Exception e){}

        }
    };

    private static Runnable t2 = new Runnable() {
        public void run() {
            try{
                for(int i=0; i<5; i++){
                    countMe("t2");
                }
            } catch (Exception e){}
       }
    };
}  

Когда я запускаю его, результат вызова метода countMe() из двух потоков дает такой результат:

Current Counter is: 1
Current Counter is: 2
Current Counter is: 4
Current Counter is: 5
Current Counter is: 6
Current Counter is: 7
Current Counter is: 3
Current Counter is: 8
Current Counter is: 9
Current Counter is: 10  

А когда я изменяю метод countMe() на:

private synchronized static void countMe(){
        i++;
        System.out.println("Current Counter is: " + i);
}  

я получаю такой результат:

Current Counter is: 1
Current Counter is: 2
Current Counter is: 3
Current Counter is: 4
Current Counter is: 5
Current Counter is: 6
Current Counter is: 7
Current Counter is: 8
Current Counter is: 9
Current Counter is: 10  

Хотя это дает мне ясное понимание цели synchronized, я хочу знать, есть ли еще какая-нибудь причина, по которой мы можем использовать synchronized. Или то, что я сделал здесь, является единственной причиной, по которой нам нужно использовать это ключевое слово synchronized?

Спасибо.

EDIT: Еще одна вещь, которая меня смущает, это то, что в первом выводе, почему счетчик перешел к 3 после 7. Мне это кажется немного невозможным, но подобные результаты происходят каждый раз, когда я пробую, это нормально?

29
задан 911TurboS 8 February 2012 в 16:36
поделиться