Задать вопрос
@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
  • Вопрос задан
  • 59 просмотров
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
@koperagen
В комментарии обсудили (: Лог выводится до того, как все корутины отработают увеличение счетчика
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Brief Москва
от 150 000 до 210 000 ₽
СМК-РК Москва
от 200 000 до 250 000 ₽
Телестор Санкт-Петербург
от 65 000 до 90 000 ₽