# 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 17. Subclasses may extend this class and provide alternative implementations for later JRE versions

## Constructor Summary

Constructors
Constructor
Description
`JreCompat()`

## Method Summary

Modifier and Type
Method
Description
`<T> T`
`callAs(Subject subject, Callable<T> action)`
`Object`
`createVirtualThreadBuilder(String name)`
Create a thread builder for virtual threads using the given name to name the threads.
`boolean`
`disableCanonCaches()`
Disable the global canonical file cache.
`Object`
`getExecutor(Thread thread)`
Obtains the executor, if any, used to create the provided thread.
`static JreCompat`
`getInstance()`
`boolean`
`isCanonCachesDisabled()`
`static boolean`
`isGraalAvailable()`
`static boolean`
`isJre19Available()`
`static boolean`
`isJre20Available()`
`static boolean`
`isJre21Available()`
`static boolean`
`isJre22Available()`
`void`
`setNamedGroupsMethod(Object sslParameters, String[] names)`
TLS groups configuration from JSSE API in Java 20.
`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 Object

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

## Constructor Details

### JreCompat

public JreCompat()

## Method Details

### getInstance

public static JreCompat getInstance()

### isGraalAvailable

public static boolean isGraalAvailable()

### isJre19Available

public static boolean isJre19Available()

### isJre20Available

public static boolean isJre20Available()

### isJre21Available

public static boolean isJre21Available()

### isJre22Available

public static boolean isJre22Available()

### 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

### callAs

public <T> T callAs(Subject subject, Callable<T> action) throws CompletionException

Throws:
  `CompletionException`

### isCanonCachesDisabled

public boolean isCanonCachesDisabled()

### disableCanonCaches

public boolean disableCanonCaches()
Disable the global canonical file cache.

Returns:
  `true` if the global canonical file cache was already disabled prior to this call or was disabled as a result of this call, otherwise `false`

### setNamedGroupsMethod

public void setNamedGroupsMethod(Object sslParameters, String[] names)
TLS groups configuration from JSSE API in Java 20.

Parameters:
  `sslParameters` - the parameters object
  `names` - the names of the groups to enable