Ejemplo n.º 1
0
  @Override
  public final boolean add(final EventType elem, final int timeOut) {
    long startTime = System.currentTimeMillis();

    do {
      if (isFreeLock.compareAndSet(true, false)) {
        final RokkaQueue<EventType> tq = actualRokkaQueueRef.get();
        if (tq.add(elem)) {
          boolean callSignalConsumer = false;
          if (signalEnabled.compareAndSet(true, false)) {
            callSignalConsumer = true;
          }
          isFreeLock.set(true);
          if (callSignalConsumer) {
            signalConsumer.signal(this);
          }
          return true;
        } else {
          isFreeLock.set(true);
          try {
            Thread.yield();
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      }
    } while (startTime + timeOut > System.currentTimeMillis());
    return false;
  }
Ejemplo n.º 2
0
 @Override
 public final void add(final EventType elem) {
   do {
     if (isFreeLock.compareAndSet(true, false)) {
       final RokkaQueue<EventType> tq = actualRokkaQueueRef.get();
       if (tq.add(elem)) {
         boolean callSignalConsumer = false;
         if (signalEnabled.compareAndSet(true, false)) // && tq.getPosition() == 1
         {
           callSignalConsumer = true;
         }
         isFreeLock.set(true);
         if (callSignalConsumer) {
           signalConsumer.signal(this);
         }
         return;
       } else {
         isFreeLock.set(true);
         try {
           Thread.yield();
         } catch (Exception e) {
           e.printStackTrace();
         }
       }
     }
   } while (true);
 }
Ejemplo n.º 3
0
 public final void enabledSignalFromConsumer() {
   boolean callSignalConsumer = false;
   do {
     if (isFreeLock.compareAndSet(true, false)) {
       if (signalConsumer != null && !signalEnabled.get()) {
         final RokkaQueue<EventType> tq = actualRokkaQueueRef.get();
         if (tq.getPosition() > 0) {
           callSignalConsumer = true;
         } else {
           signalEnabled.compareAndSet(false, true);
         }
       }
       isFreeLock.set(true);
       break;
     }
     Thread.yield();
   } while (true);
   if (callSignalConsumer) {
     signalConsumer.signal(this, false);
   }
 }