Package org.apache.tomcat.util.compat

## Class JreCompat

- java.lang.Object
- - org.apache.tomcat.util.compat.JreCompat

- Direct Known Subclasses:
    `Jre19Compat`

      public class JreCompat
      extends Object

  This is the base implementation class for JRE compatibility and provides an implementation based on Java 11. Sub-classes may extend this class and provide alternative implementations for later JRE versions

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `JreCompat()` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `Object` | `createVirtualThreadBuilder​(String name)` | Create a thread builder for virtual threads using the given name to name the threads.
    `Object` | `getExecutor​(Thread thread)` | Obtains the executor, if any, used to create the provided thread.
    `static JreCompat` | `getInstance()` |
    `SocketAddress` | `getUnixDomainSocketAddress​(String path)` | Return Unix domain socket address for given path.
    `static boolean` | `isGraalAvailable()` |
    `static boolean` | `isJre16Available()` |
    `static boolean` | `isJre19Available()` |
    `static boolean` | `isJre21Available()` |
    `static boolean` | `isJre22Available()` |
    `ServerSocketChannel` | `openUnixDomainServerSocketChannel()` | Create server socket channel using the Unix domain socket ProtocolFamily.
    `SocketChannel` | `openUnixDomainSocketChannel()` | Create socket channel using the Unix domain socket ProtocolFamily.
    `void` | `threadBuilderStart​(Object threadBuilder, Runnable command)` | Create a thread with the given thread builder and use it to execute the given runnable.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### JreCompat

          public JreCompat()

  - ### Method Detail

    - #### getInstance

          public static JreCompat getInstance()

    - #### isGraalAvailable

          public static boolean isGraalAvailable()

    - #### isJre16Available

          public static boolean isJre16Available()

    - #### isJre19Available

          public static boolean isJre19Available()

    - #### isJre21Available

          public static boolean isJre21Available()

    - #### isJre22Available

          public static boolean isJre22Available()

    - #### getUnixDomainSocketAddress

          public SocketAddress getUnixDomainSocketAddress​(String path)

      Return Unix domain socket address for given path.
      Parameters:
        `path` - The path
      Returns:
        the socket address

    - #### openUnixDomainServerSocketChannel

          public ServerSocketChannel openUnixDomainServerSocketChannel()

      Create server socket channel using the Unix domain socket ProtocolFamily.
      Returns:
        the server socket channel

    - #### openUnixDomainSocketChannel

          public SocketChannel openUnixDomainSocketChannel()

      Create socket channel using the Unix domain socket ProtocolFamily.
      Returns:
        the socket channel

    - #### getExecutor

          public Object getExecutor​(Thread thread)
                             throws NoSuchFieldException,
                                    SecurityException,
                                    IllegalArgumentException,
                                    IllegalAccessException

      Obtains the executor, if any, used to create the provided thread.
      Parameters:
        `thread` - The thread to examine
      Returns:
        The executor, if any, that created the provided thread
      Throws:
        `NoSuchFieldException` - If a field used via reflection to obtain the executor cannot be found
        `SecurityException` - If a security exception occurs while trying to identify the executor
        `IllegalArgumentException` - If the instance object does not match the class of the field when obtaining a field value via reflection
        `IllegalAccessException` - If a field is not accessible due to access restrictions

    - #### createVirtualThreadBuilder

          public Object createVirtualThreadBuilder​(String name)

      Create a thread builder for virtual threads using the given name to name the threads.
      Parameters:
        `name` - The base name for the threads
      Returns:
        The thread buidler for virtual threads

    - #### threadBuilderStart

          public void threadBuilderStart​(Object threadBuilder,
                                         Runnable command)

      Create a thread with the given thread builder and use it to execute the given runnable.
      Parameters:
        `threadBuilder` - The thread builder to use to create a thread
        `command` - The command to run