Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
LetoLetoD
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 65
1

Потоки не работают параллельно

28.09.2016, 08:16. Просмотров 838. Ответов 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
Почему оно так?)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2016, 08:16
Ответы с готовыми решениями:

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

Потоки не выполняются параллельно
Почему потоки выполняются один за другим? using namespace std; void...

Как сделать, чтобы потоки выполнялись параллельно?
у меня есть 6 потоков, но как мне сделать чтобы они шли параллельно ? static...

Потоки осуществляющие сравнение фраз параллельно по словам
Охранное агентство разработало новую систему управления электронными замками....

Потоки ставятся в очередь, а не идут параллельно, объясните, пожалуйста
Добрый день, коллеги, разъясните, пожалуйста, наверняка простую ситуацию....

3
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,003
28.09.2016, 08:47 2
LetoLetoD, может потому что асинктаски так устроены?
0
LetoLetoD
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 65
28.09.2016, 08:56  [ТС] 3
vxg, может, вам виднее) А каким тогда другим способом запустить несколько потоков, которые отработают параллельно и по завершению выполнят функцию в главном потоке?
0
androbro
344 / 304 / 68
Регистрация: 17.10.2014
Сообщений: 903
28.09.2016, 09:23 4
Лучший ответ Сообщение было отмечено vxg как решение

Решение

LetoLetoD, замените дефолтное поведение потоков на
Java
1
FiveSecTask.execute();
на
Java
1
FiveSecTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
и будет вам счастье
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2016, 09:23

Не работают потоки
new Thread((ThreadStart)delegate { keyThread(1, 2); }); new...

Потоки медленно работают
Создаю 1 поток в нем выполняется цикл в конце цикла Thread.Sleep(100); Если...

Не работают потоки в программе
Я в delphi начинающий. Пытался с потоками разобраться. После компиляции лезет...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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