Handle-message
Handle-message — это Java SDK для многопоточной коммуникации, вдохновлённый механизмом Handle в Android. Он прост в использовании и обладает мощными функциями.
В большинстве случаев, когда мы хотим получить результат от дочернего потока в основном потоке, мы используем Thread.join(). Однако этот метод может привести к блокировке, и иногда мы не хотим ждать завершения дочернего потока перед продолжением выполнения основного потока. Вкратце, нам нужна асинхронная коммуникация, и handle-message решает эту проблему.
Без лишних слов, давайте рассмотрим пример кода:
// Подготовка Looper в главном потоке
Looper.prepareMainLooper();
// Создание Handler
final MainHandler handler = new MainHandler();
// Запуск пула потоков
Executor executor = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
final int position = i + 1;
System.out.println(i);
executor.execute(new Runnable() {
@Override
public void run() {
try {
// Дочерний поток передаёт задачу основному потоку
handler.postDelayed(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " : " + position);
}
}, 1000);
Thread thread = Thread.currentThread();
// Дочерний поток отправляет сообщение основному потоку
Message.obtain(handler, position, position, position, "Главный поток, привет! Я поток: " + thread.getName()).sendToTarget();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Обработка сообщений, отправленных дочерними потоками в основном потоке
*/
private static class MainHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case WhatConstants.WHAT_ONE:
String obj1 = (String) msg.obj;
System.out.println(obj1);
break;
case WhatConstants.WHAT_TWO:
String obj2 = (String) msg.obj;
System.out.println(obj2);
break;
case WhatConstants.WHAT_THREE:
String obj3 = (String) msg.obj;
System.out.println(obj3);
break;
case WhatConstants.WHAT_FOUR:
String obj4 = (String) msg.obj;
System.out.println(obj4);
break;
case WhatConstants.WHAT_FIVE:
String obj5 = (String) msg.obj;
System.out.println(obj5);
break;
case WhatConstants.WHAT_SIX:
String obj6 = (String) msg.obj;
System.out.println(obj6);
break;
case WhatConstants.WHAT_SEVEN:
String obj7 = (String) msg.obj;
System.out.println(obj7);
break;
case WhatConstants.WHAT_EIGHT:
String obj8 = (String) msg.obj;
System.out.println(obj8);
break;
case WhatConstants.WHAT_NINE:
String obj9 = (String) msg.obj;
System.out.println(obj9);
break;
case WhatConstants.WHAT_TEN:
String obj10 = (String) msg.obj;
System.out.println(obj10);
break;
}
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )