Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

28.09.2016, 08:16. Просмотров 188. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Потоки не работают параллельно (Программирование Android):

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

Потоки не выполняются параллельно - C++
Почему потоки выполняются один за другим? using namespace std; void proc1(const int num) { int max_i = 50000; ...

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

.NET 4.x Как сделать, чтобы потоки выполнялись параллельно? - C#
у меня есть 6 потоков, но как мне сделать чтобы они шли параллельно ? static void Main(string args) { Thread t1 =...

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

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

3
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,684
28.09.2016, 08:47 #2
LetoLetoD, может потому что асинктаски так устроены?
0
LetoLetoD
2 / 2 / 3
Регистрация: 24.01.2016
Сообщений: 59
28.09.2016, 08:56  [ТС] #3
vxg, может, вам виднее) А каким тогда другим способом запустить несколько потоков, которые отработают параллельно и по завершению выполнят функцию в главном потоке?
0
androbro
326 / 287 / 61
Регистрация: 17.10.2014
Сообщений: 856
28.09.2016, 09:23 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
LetoLetoD, замените дефолтное поведение потоков на
Java
1
FiveSecTask.execute();
на
Java
1
FiveSecTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
и будет вам счастье
1
28.09.2016, 09:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2016, 09:23
Привет! Вот еще темы с ответами:

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

Некорректно работают потоки - C#
В общем мне нужно сделать задание - рассчитать детерминант матрицы. Пользуюсь стандартным алгоритмом. Решил распаралеллить вычисления,...

Как работают потоки - Java SE
Здравствуйте! Объясните мне каким образом работают потоки. Правда ли что они могут ОДНОВРЕМЕННО выполнять операции? То есть в определённые...

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


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

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

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