Форум программистов, компьютерный форум, киберфорум
mutagen
Войти
Регистрация
Восстановить пароль
все вопросы по Java которые задают более 3х раз на форуме
Оценить эту запись

Как работает CallBack (Обратный вызов)

Запись от mutagen размещена 02.02.2014 в 14:10

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import java.util.ArrayList;
import java.util.Random;
 
/**
 *
 * @author mutagen
 */
public class CallBackDemo {
 
    public static void main(String[] args) {
 
        Caller caller = new Caller();
 
        for (int i = 0; i < 10; i++) {
            new Worker(caller).start();
        }
//        итого у нас 9 воркеров отработали и вернули ответ по калбеку в коллекцию
        System.out.println(caller.getStatuses());
    }
 
    static class Caller implements Callback {
 
        private ArrayList<Integer> statuses = new ArrayList<>();
 
        public ArrayList<Integer> getStatuses() {
            return statuses;
        }
 
        @Override
        public void callMeBack(int status) {
//            тут может быть логика куда вернутся данные, может быть коллекция, я выбрал попроще
            synchronized (statuses) {
                statuses.add(status);
            }
        }
    }
 
    static interface Callback {
//        подготовим интерфейс по которому нам будут возвращать данные
 
        void callMeBack(int status);
    }
 
    static class Worker extends Thread {
 
        private Callback cb;
 
        public Worker(Callback cb) {
            this.cb = cb;
        }
 
        int pleaseDoMeAFavor() {
            return new Random().nextInt();
        }
 
        @Override
        public void run() {
//            выполним работу 
            int st = pleaseDoMeAFavor();
//            и вернём данные вызывающему по калбек интерфейсу
            cb.callMeBack(st);
        }
    }
}
Размещено в Без категории
Показов 2508 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru