Lecture Notes for Concurrent Programming

29 July 2003 - Asynchronous Request-Response


Outline


Asynchronous Request-Response


Callbacks


Callback Example

class ClientCallback implements ReplyCallback

  volatile boolean done = false, succeeded = true

  void requestCompleted(...)
    done = true

  void requestFailed(...)
    done = true ; succeeded = false


class Client implements Runnable

  void run() 
    MyCallback mcb = new MyCallback()
    server.request(..., mcb)

    while (!mcb.done)
      do some work

    if mcb.succeeded


class Server implements Server

  void request(..., ReplyCallback rcb)
    do the request
    if success
      rcb.requestCompleted
    else
      rcb.requestFailed


Callback Refinements


Fork-Join Synchronization


Futures


Implementing Futures

class Future

  private sema valueReady(0)
  private Object value

  void putValue(Object o)
    value = o
    valueReady.signal()

  Object getValue(Object o)
    valueReady.wait()
    return value


Callables


Managing Pending Requests


Points to Remember


This page last modified on 29 July 2003.