Concurrency in OOPS
Concurrency in OOPS
Douglas C. Schmidt
d.schmidt@vanderbilt.edu
www.dre.vanderbilt.edu/~schmidt
Handler
implementation
Handler
method_2
interface
method_1
2
Android Concurrency Douglas C. Schmidt
UI Thread
sendMessage
Handler
… implementation
Handler
Background thread interface …
handleMessage
3
Android Concurrency Douglas C. Schmidt
UI Thread
(main thread)
4
Android Concurrency Douglas C. Schmidt
5
Android Concurrency Douglas C. Schmidt
transparently Handler
Message
Looper
void handleMessage(Message msg)
Message
{
...
Message }
Message
Message Message
Thread2
6
Android Concurrency Douglas C. Schmidt
transparently Handler
• Ensuring that processing-
intensive methods
invoked on an object Message
Looper
void handleMessage(Message msg)
concurrently do not block Message
{
the entire process Message }
...
Message
Message Message
Thread2
7
Android Concurrency Douglas C. Schmidt
transparently Handler
• Ensuring that processing-
intensive methods
invoked on an object Message
Looper
void handleMessage(Message msg)
concurrently do not block Message
{
the entire process Message }
...
• Making synchronized
Message
access to shared objects
Message
easy & intuitive to
Message
program
Thread2
8
Android Concurrency Douglas C. Schmidt
UI Thread
sendMessage
Handler
… implementation
Handler
Background thread interface …
handleMessage
9
Android Concurrency Douglas C. Schmidt
UI Thread
sendMessage
Handler
… implementation
Handler
Background thread interface …
handleMessage
10
Android Concurrency Douglas C. Schmidt
Handler
implementation
Handler
method_2
interface
method_1
www.dre.vanderbilt.edu/~schmidt/PDF/Act-Obj.pdf
11 has more info
Android Concurrency Douglas C. Schmidt
Handler
implementation
Handler
method_2
interface
method_1
12
Android Concurrency Douglas C. Schmidt
Handler
implementation
Handler
method_2
interface
method_1
13
Android Concurrency Douglas C. Schmidt
Handler
implementation
Handler
method_2
interface
method_1
14
Android Concurrency Douglas C. Schmidt
Handler
implementation
Handler
method_2
interface
method_1
15
Android Concurrency Douglas C. Schmidt
Handler
implementation
Handler
method_2
interface
method_1
16
Android Concurrency Douglas C. Schmidt
Handler
implementation
Handler
method_2
interface
method_1
18
Android Concurrency Douglas C. Schmidt
Handler
19
Android Concurrency Douglas C. Schmidt
Message
20
Android Concurrency Douglas C. Schmidt
21
Android Concurrency Douglas C. Schmidt
22
Android Concurrency Douglas C. Schmidt
MyHandler
23
Android Concurrency Douglas C. Schmidt
MyActivity
24
Android Concurrency Douglas C. Schmidt
25
Android Concurrency Douglas C. Schmidt
26
Android Concurrency Douglas C. Schmidt
27
Android Concurrency Douglas C. Schmidt
28
Android Concurrency Douglas C. Schmidt
29
Android Concurrency Douglas C. Schmidt
boolean sendMessageAtTime
(Message msg, long uptimeMillis) {
MessageQueue queue = mQueue;
queue.enqueueMessage
(msg, uptimeMillis);
...
boolean sendMessageAtTime
(Message msg, long uptimeMillis) {
MessageQueue queue = mQueue;
queue.enqueueMessage
(msg, uptimeMillis);
...
frameworks/base/core/java/android/os/Handler.java
31 has the source code
Android Concurrency Douglas C. Schmidt
boolean sendMessageAtTime
(Message msg, long uptimeMillis) {
MessageQueue queue = mQueue;
queue.enqueueMessage
(msg, uptimeMillis);
...
frameworks/base/core/java/android/os/MessageQueue.java
33 has source code
Android Concurrency Douglas C. Schmidt
wiki.hsr.ch/APF/files/CommandProcessor.pdf
34 has more on Command Processor
Android Concurrency Douglas C. Schmidt
frameworks/base/core/java/android/os/Looper.java
35 has source code
Android Concurrency Douglas C. Schmidt
36
Android Concurrency Douglas C. Schmidt
developer.android.com/reference/android/os/Message.html#sendToTarget()
37
Android Concurrency Douglas C. Schmidt
query()
See developer.android.com/reference/android/content/ContentResolver.html
38
Android Concurrency Douglas C. Schmidt
See developer.android.com/reference/android/content/ContentResolver.html
39
Android Concurrency Douglas C. Schmidt
: MyAsync
: Activity QueryHandler
startQuery()
See developer.android.com/reference/android/content/AsyncQueryHandler.html
40
Android Concurrency Douglas C. Schmidt
: MyAsync : Worker
: Activity QueryHandler Handler
startQuery() handleMessage()
sendMessage()
See developer.android.com/reference/android/content/AsyncQueryHandler.html
41
Android Concurrency Douglas C. Schmidt
startQuery() handleMessage()
sendMessage() Run query on
query() ContentProvider
& return result
See developer.android.com/reference/android/content/AsyncQueryHandler.html
42
Android Concurrency Douglas C. Schmidt
startQuery() handleMessage()
sendMessage() Run query on
query() ContentProvider
& return result
sendToTarget()
Caller returns & the call
runs asynchronously
See developer.android.com/reference/android/content/AsyncQueryHandler.html
43
Android Concurrency Douglas C. Schmidt
startQuery() handleMessage()
sendMessage() Run query on
query() ContentProvider
& return result
handleMessage() sendToTarget()
onQueryComplete() Handle completion of the
asynchronously invoked query
See developer.android.com/reference/android/content/AsyncQueryHandler.html
44
Android Concurrency Douglas C. Schmidt
frameworks/base/core/java/android/content/AsyncQueryHandler.java
45 has code
Android Concurrency Douglas C. Schmidt
concurrently Handler
Message
Looper
Message void handleMessage(Message msg)
{
Message ...
}
Message
Message Message
Thread2
46
Android Concurrency Douglas C. Schmidt
concurrently Handler
Looper
Message void handleMessage(Message msg)
{
Message ...
}
Message
Message Message
Thread2
47
Android Concurrency Douglas C. Schmidt
Looper
void handleMessage(Message msg)
the OS/hardware Message
{
...
Message }
Message
Message
Message
Message Message
Thread2
Thread2
Thread2
48
Android Concurrency Douglas C. Schmidt
Looper
according to synchronization Message void handleMessage(Message msg)
{
constraints defined by guards Message ...
& scheduling policies Message
}
Message Message
Thread2
49
Android Concurrency Douglas C. Schmidt
case SET_PROGRESS_BAR_VISIBILITY:
Message {
3. void loop() { progress.setVisibility
Message
... ((Integer) msg.obj);
for (;;) { Message break;
Message msg = queue.next(); }
Message ... Message
...
msg.target.
dispatchMessage(msg); UI Thread
... (main thread)
50
Android Concurrency Douglas C. Schmidt
case SET_PROGRESS_BAR_VISIBILITY:
Message {
3. void loop() { progress.setVisibility
Message
... ((Integer) msg.obj);
for (;;) { Message break;
Message msg = queue.next(); }
Message ... Message
...
msg.target.
dispatchMessage(msg); UI Thread
... (main thread)
51
Android Concurrency Douglas C. Schmidt
case SET_PROGRESS_BAR_VISIBILITY:
Message {
3. void loop() { progress.setVisibility
Message
... ((Integer) msg.obj);
for (;;) { Message break;
Message msg = queue.next(); }
Message ... Message
...
msg.target.
dispatchMessage(msg); UI Thread
... (main thread)
52
Android Concurrency Douglas C. Schmidt
case SET_PROGRESS_BAR_VISIBILITY:
Message {
3. void loop() { progress.setVisibility
Message
... ((Integer) msg.obj);
for (;;) { Message break;
Message msg = queue.next(); }
Message ... Message
...
msg.target.
dispatchMessage(msg); UI Thread
... (main thread)
53
Android Concurrency Douglas C. Schmidt
54
Android Concurrency Douglas C. Schmidt
56
en.wikipedia.org/wiki/Actor_model has more info
Android Concurrency Douglas C. Schmidt
57
en.wikipedia.org/wiki/Actor_model has more info
Android Concurrency Douglas C. Schmidt
Active(): done(false)
{ th = unique_ptr<thread>(new thread([=]{ this->run(); })); }
~Active() { send([&]{done = true;}); th->join(); }
private:
message_queue<Message> mq; bool done; unique_ptr<thread> th;
void run(){ while(!done){ Message msg = mq.receive(); msg();}}
};
www.drdobbs.com/parallel/prefer-using-active-objects-instead-of-n/225700095
58
Android Concurrency Douglas C. Schmidt
See www.dre.vanderbilt.edu/~schmidt/PDF/ACE-concurrency.pdf
59 for more info
Android Concurrency Douglas C. Schmidt
Summary
Handler
implementation
Handler
method_2
interface
method_1
60
Android Concurrency Douglas C. Schmidt
Summary
Handler
implementation
Handler
method_2
interface
method_1
See www.dre.vanderbilt.edu/~schmidt/PDF/Act-Obj.pdf
61 for Active Object
Android Concurrency Douglas C. Schmidt
Summary
Handler
implementation
Handler
method_2
interface
method_1
See www.dre.vanderbilt.edu/~schmidt/PDF/monitor.pdf
62 for comparisons