Почему в моей программе многопоточности есть три вида результатов? - PullRequest
0 голосов
/ 23 сентября 2019
class Threadtest6 implements Runnable {
    int i = 1;
    static int sum = 0;

    @Override
    public void run() {
        for (; i < 10; i++) {
            //There are three cases where the main function outputs a different result


            //1.The result is 45  The next one lines are the code
            // sum = sum + i;

            //2.The result is 55  The next two lines are the code
            //System.out.println(Thread.currentThread().getName() + "---" + i);
            //sum = sum + i;

            //3.The result is 46 The next two lines are the code
            //sum = sum + i;
            //System.out.println(Thread.currentThread().getName() + "---" + i);

        }
    }

    public static void main(String[] args) throws InterruptedException {

        Threadtest6 t1 = new Threadtest6();
        Thread thread1 = new Thread(t1);
        Thread thread2 = new Thread(t1);
        thread1.start();
        thread2.start();
        //Prevents the main thread from completing first
        Thread.sleep(500);
        System.out.println(sum);
    }
}

В этом коде есть три результата.Я думаю, что я все равно использовал сон, и я проверил его примерно 5 раз для каждого случая.Почему возникает такая ситуация?

1 Ответ

0 голосов
/ 24 сентября 2019

Результат повторных казней, похоже, исправлен.Фактически, поскольку данных недостаточно, если диапазон i расширяется, например, i <10 изменяется на i <10000, результат нескольких выполнений не будет одинаковым.Что касается того, почему результат i <10 связан с расположением 'sum = sum + i;', я думаю, что это должно быть результатом многопоточной конкуренции. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...