< prev index next > src/java.base/share/classes/sun/nio/ch/PollerProvider.java
Print this page
/**
* Provider class for Poller implementations.
*/
abstract class PollerProvider {
! private static final PollerProvider INSTANCE = new DefaultPollerProvider();
! PollerProvider() { }
/**
! * Returns the system-wide PollerProvider.
*/
! static PollerProvider provider() {
! return INSTANCE;
}
/**
! * Returns the default poller mode.
- * @implSpec The default implementation uses system threads.
*/
! Poller.Mode defaultPollerMode() {
! return Poller.Mode.SYSTEM_THREADS;
}
/**
! * Default number of read pollers for the given mode. The count must be a power of 2.
* @implSpec The default implementation returns 1.
*/
! int defaultReadPollers(Poller.Mode mode) {
return 1;
}
/**
! * Default number of write pollers for the given mode. The count must be a power of 2.
* @implSpec The default implementation returns 1.
*/
! int defaultWritePollers(Poller.Mode mode) {
return 1;
}
/**
* Maps a file descriptor to an index from 0 to {@code toIndex}.
/**
* Provider class for Poller implementations.
*/
abstract class PollerProvider {
! private final Poller.Mode mode;
! PollerProvider(Poller.Mode mode) {
+ this.mode = mode;
+ }
+
+ final Poller.Mode pollerMode() {
+ return mode;
+ }
/**
! * Creates a PollerProvider that uses its preferred/default poller mode.
*/
! static PollerProvider createProvider() {
! return new DefaultPollerProvider();
}
/**
! * Creates a PollerProvider that uses the given poller mode.
*/
! static PollerProvider createProvider(Poller.Mode mode) {
! return new DefaultPollerProvider(mode);
}
/**
! * Default number of read pollers. The count must be a power of 2.
* @implSpec The default implementation returns 1.
*/
! int defaultReadPollers() {
return 1;
}
/**
! * Default number of write pollers. The count must be a power of 2.
* @implSpec The default implementation returns 1.
*/
! int defaultWritePollers() {
return 1;
}
/**
* Maps a file descriptor to an index from 0 to {@code toIndex}.
int fdValToIndex(int fdVal, int toIndex) {
return fdVal & (toIndex - 1);
}
/**
! * Creates a Poller for read ops.
* @param subPoller true to create a sub-poller
*/
abstract Poller readPoller(boolean subPoller) throws IOException;
/**
! * Creates a Poller for write ops.
* @param subPoller true to create a sub-poller
*/
abstract Poller writePoller(boolean subPoller) throws IOException;
}
int fdValToIndex(int fdVal, int toIndex) {
return fdVal & (toIndex - 1);
}
/**
! * Creates a Poller for POLLIN polling.
* @param subPoller true to create a sub-poller
*/
abstract Poller readPoller(boolean subPoller) throws IOException;
/**
! * Creates a Poller for POLLOUT polling.
* @param subPoller true to create a sub-poller
*/
abstract Poller writePoller(boolean subPoller) throws IOException;
+
+ /**
+ * Returns true if read pollers support read ops in addition to POLLIN polling.
+ * @implSpec The default implementation returns false.
+ */
+ boolean supportReadOps() {
+ return false;
+ }
+
+ /**
+ * Returns true if write pollers support write ops in addition to POLLOUT polling.
+ * @implSpec The default implementation returns false.
+ */
+ boolean supportWriteOps() {
+ return false;
+ }
}
< prev index next >