Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
LetoLetoD
2 / 2 / 3
Регистрация: 24.01.2016
Сообщений: 59
#1

Потоки не работают параллельно - Программирование Android

28.09.2016, 08:16. Просмотров 170. Ответов 3
Метки нет (Все метки)

Написал я такой кусок кода (все это внутри класса MainActivity):

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    class CalcFiveSecClass extends AsyncTask<Void, Void, String> {
 
        @Override
        protected String doInBackground(Void... noargs) {
            return CalcFiveSecFunc();
        }
 
        @Override
        protected void onPostExecute(String result) {
            CalcFiveSecComplete();
        }
    }
 
    public String CalcFiveSecFunc() {
        Log.i(LOG_TAG, "CalcFiveSecFunc - Begin");
        SystemClock.sleep(5000);
        Log.i(LOG_TAG, "CalcFiveSecFunc - End");
        return "";
    }
 
    public void CalcFiveSecStart() {
        Log.i(LOG_TAG, "CalcFiveSecStart");
        TimeThreadNumber++;
        CalcFiveSecClass FiveSecTask = new CalcFiveSecClass();
        FiveSecTask.execute();
    }
Пусть CalcFiveSecStart вызывается по нажатию какой-нибудь кнопки и пусть ее нажимают быстро 3 раза подряд. Я ожидал, что три функции CalcFiveSecFunc отработают параллельно в разных потоках, на деле же они работают последовательно, и в логах я вижу примерно следующее:

Java
1
2
3
4
5
6
7
8
9
CalcFiveSecStart
CalcFiveSecStart
CalcFiveSecStart
CalcFiveSecFunc - Begin
CalcFiveSecFunc - End
CalcFiveSecFunc - Begin
CalcFiveSecFunc - End
CalcFiveSecFunc - Begin
CalcFiveSecFunc - End
Почему оно так?)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2016, 08:16     Потоки не работают параллельно
Посмотрите здесь:

AsyncTask doInbackground и onPostExecute выполняются параллельно ? - Программирование Android
Привет всем)) колдую на AsyncTask doInBackground и onPostExecute Читал что onPostExecute выполняется всегда после doInBackground, но то...

потоки - Программирование Android
вообщем есть поток в котором не важно что выполняется, важно что в нем есть view компонент к которому нужно получить доступ ,а доступ к...

Потоки - Программирование Android
Как сделать отдельный поток, наподобие такого?? class MyTask extends AsyncTask&lt;Void, Spanned , Void&gt; { protected void...

Потоки. Canvas - Программирование Android
Добрый день. Подскажите, как реализовать обработку изменения цвета с помощью потоков? Не могу разобраться как обратиться package...

Потоки и post запрос - Программирование Android
Добрый вечер всем. Уже два дня не могу разобраться с выполнением post запроса на андроиде. Перечитал кучу статей. Знаю что с андроида 2.3...

Потоки в фрагменте не запустить? - Программирование Android
Не могу использовать потоки в фрагменте. использую конструкцию: new Thread() { @Override public void run() { ...code ...

Потоки. Доступ к переменным - Программирование Android
Помогите с вопросом о видимости переменных. Я создал поток внутри класса Activity. Теперь не могу обратиться из потока к объявленым...

Таймер и параллельные потоки - Программирование Android
Добрый день, сразу оговорюсь, что прошёлся поиском по темам с запросом &quot;таймер&quot;, &quot;потоки&quot; и т.д. Разрабатываю приложение с Canvas и...

Потоки. Thread и runOnUiThread - Программирование Android
Пытаюсь в отдельном потоке выполнять действия и во время этого показывать ProgressBar. public void runProcess() { //запускаем...

Потоки (Handler внутри synchronized) - Программирование Android
private Handler Ocnova = new Handler(); private Object sync = new Object(); class newThread extends Thread { //...String mes..... ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3118 / 1920 / 208
Регистрация: 13.01.2012
Сообщений: 7,353
28.09.2016, 08:47     Потоки не работают параллельно #2
LetoLetoD, может потому что асинктаски так устроены?
LetoLetoD
2 / 2 / 3
Регистрация: 24.01.2016
Сообщений: 59
28.09.2016, 08:56  [ТС]     Потоки не работают параллельно #3
vxg, может, вам виднее) А каким тогда другим способом запустить несколько потоков, которые отработают параллельно и по завершению выполнят функцию в главном потоке?
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 836
28.09.2016, 09:23     Потоки не работают параллельно #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
LetoLetoD, замените дефолтное поведение потоков на
Java
1
FiveSecTask.execute();
на
Java
1
FiveSecTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
и будет вам счастье
Yandex
Объявления
28.09.2016, 09:23     Потоки не работают параллельно
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru