Package org.jppf.nio

Class SelectorSynchronizerLock

java.lang.Object
org.jppf.nio.SelectorSynchronizerLock
All Implemented Interfaces:
SelectorSynchronizer

public class SelectorSynchronizerLock extends Object implements SelectorSynchronizer
Synchronization aid for a Selector, to prevent SelectionKey.interestOps(int) invocations from blocking for too long.

Usage pattern:

- in the selection loop:

 SelectorSynchronizer sync = new SelectorSynchronizerLock(selector);
 
 try {
   int n = 0;
   while (true) {
     sync.waitForZeroAndSetToMinusOne();
     try {
       n = selector.select(selectTimeout);
     } finally {
       sync.setToZeroIfNegative();
     }
     if (n > 0) {
       // process selected keys
     }
   }
 } catch (Exception e) {
   // process exception
 }
 

- in separate threads:

 public void setInterestOps(SelectionKey key, int newOps) throws Exception {
   sync.wakeUpAndSetOrIncrement();
   try {
     key.interestOps(newOps);
   } finally {
     sync.decrement();
   }
 }
 
Author:
Laurent Cohen
  • Constructor Details

    • SelectorSynchronizerLock

      public SelectorSynchronizerLock(Selector selector)
      Initialize with the specified selector.
      Parameters:
      selector - the selector to wakeup.
  • Method Details