Skip to content

@Await @Signal @SignalBeforeAwaitAfter

peichhorn edited this page Jun 30, 2012 · 1 revision

@Await, @Signal and @SignalBeforeAwaitAfter

Overview

(Documentation pending)

Example

With Lombok

import lombok.AccessLevel;
import lombok.Await;
import lombok.Getter;
import lombok.Signal;

class ConditionExample {
  @Getter(AccessLevel.PRIVATE)
  private volatile boolean paused;
 
  @Signal("canResume")
  void unpause() {
    paused = false;
  }

  @Await(conditionName = "canResume", conditionMethod="isPaused")
  void pause() {
  }
}

Vanilla Java

public class ConditionExample {
  private final java.util.concurrent.locks.Lock $canResumeLock = new java.util.concurrent.locks.ReentrantLock();
  private final java.util.concurrent.locks.Condition canResume = $canResumeLock.newCondition();
  private volatile boolean paused;

  void unpause() {
    this.$canResumeLock.lock();
    try {
      paused = false;
      this.canResume.signal();
    } finally {
      this.$canResumeLock.unlock();
    }
  }

  void pause() {
    this.$canResumeLock.lock();
    try {
      try {
        while (this.isPaused()) this.canResume.await();
      } catch (final java.lang.InterruptedException e) {
        throw new java.lang.RuntimeException(e);
      }
    } finally {
      this.$canResumeLock.unlock();
    }
  }

  private boolean isPaused() {
    return this.paused;
  }
}

Behind the Scenes

(Documentation pending)

Configuration

Nothing to configure yet.


Clone this wiki locally