@foonfyrick

Почему при увеличении числа в корутинах, число иногда имеет другое значение?

1)Почему, если я пишу этот код, то в runBlocking у меня иногда меняется значение переменной, иногда оно 20 000, а иногда чуть меньше, но стоит мне удалить весь CoroutineScope и оставить только runBlocking, то у меня значение переменной всегда равно 10 000.
2)И почему вообще в первом случае, когда есть и coroutineScope и runBlockin у меня переменная в обоих случаях стремится к 20 000, а не к 10 000? Такое ощущение, что повторы пытаются сложиться, но в runBlockin они складываются криво.

Код:
val int = AtomicInteger()

            CoroutineScope(Dispatchers.IO).launch {
                repeat(100) {
                    launch {
                        repeat(100) {
                            int.incrementAndGet()
                        }
                    }
                }
                Log.e("@@@ CoroutineScope @@@", int.toString())
            }


        runBlocking {
            withContext(Dispatchers.IO) {
                repeat(100) {
                    launch {
                        repeat(100) {
                            int.incrementAndGet()
                        }
                    }
                }
            }
            Log.e("@@@ withContext @@@", int.toString())
        }

Скрины:
5fe4197755730781290596.png
5fe41983af53b758327866.png
5fe41990687c6916381975.png
5fe41999a9975651794145.png
5fe419a800c28053724822.png
5fe419b7642f1997046543.png
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
@koperagen
В комментарии обсудили (: Лог выводится до того, как все корутины отработают увеличение счетчика
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы