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

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

Войти через центр авторизации
Похожие вопросы
24 июл. 2024, в 05:17
50000 руб./за проект
24 июл. 2024, в 01:58
40000 руб./за проект
24 июл. 2024, в 01:55
5000 руб./за проект