Resource Management is a commercial feature that must be unlocked before being used. To learn more about commercial features and how to unlock them visit http://www.oracle.com/technetwork/java/javaseproducts/
jdk.management.resource

## Class ResourceContextFactory

- java.lang.Object
- - jdk.management.resource.ResourceContextFactory

-     public final class ResourceContextFactory
      extends Object

  The ResourceContextFactory provides access to ResourceContext functions. The factory provides methods to:
  - Return the `ResourceContextFactory` instance and checks if the API is accessible to the caller
  - Check if ResourceContexts are `enabled`
  - Return a `new ResourceContext`
  - Return a `ResourceContext by name`
  - Return the `ResourceContext bound to the current thread`
  - Return the `UnassignedContext used for all unbound threads`
  - Return the `TotalsContext that tracks totals of all contexts`
  - Return a `Stream of the ResourceContexts`
  - Return the `supported ResourceTypes`
  The `getInstance` method checks if there is a SecurityManager installed and the `RuntimePermission("jdk.management.resource.getResourceContextFactory")` is allowed. The reference to the ResourceContextFactory is a capability and should not be shared.

  Threads that exist when the ResourceContextFactory is initialized are bound to the `unassignedContext` if they are not system threads. System threads ( with `(thread.getThreadGroup().getParent() == null` ) are not bound to the `unassignedContext`. The resources used by system threads are not recorded.

  Since:
    8u40

- - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `Stream<ResourceContext>` | `contexts()` Returns a Stream of the existing ResourceContexts.
    `ResourceContext` | `create(String name)` Create a new ResourceContext.
    `static ResourceContextFactory` | `getInstance()` Returns the factory for ResourceContexts if enabled in the runtime.
    `ResourceRequest` | `getResourceRequest(ResourceType type)` Returns the ResourceRequest for the current ResourceContext and ResourceType.
    `ResourceContext` | `getThreadContext()` Returns the ResourceContext associated with the current thread.
    `ResourceContext` | `getThreadContext(Thread thread)` Returns the ResourceContext associated with the thread.
    `ResourceContext` | `getTotalsContext()` Returns a ResourceContext that provides the totals for all ResourceContexts.
    `ResourceContext` | `getUnassignedContext()` Returns the ResourceContext that is the default when a thread is not associated with a ResourceContext.
    `static boolean` | `isEnabled()` Returns `true` if and only if ResourceManagement is enabled.
    `ResourceContext` | `lookup(String name)` Returns the ResourceContext given by name.
    `Set<ResourceType>` | `supportedResourceTypes()` Returns a read-only Set of the builtin ResourceTypes available in the current runtime.

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

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

- - ### Method Detail

    - #### isEnabled

          public static boolean isEnabled()

      Returns `true` if and only if ResourceManagement is enabled. Refer to `supportedResourceTypes()` for the set of resources available.
      Returns:
        `true` if and only if ResourceManagement is enabled; otherwise `false`
      Throws:
        `SecurityException` - if a SecurityManager is installed and the `RuntimePermission("jdk.management.resource.getResourceContextFactory)` is denied

    - #### getInstance

          public static ResourceContextFactory getInstance()

      Returns the factory for ResourceContexts if enabled in the runtime.
      Returns:
        the factory for ResourceContexts
      Throws:
        `SecurityException` - if a SecurityManager is installed and the `RuntimePermission("jdk.management.resource.getResourceContextFactory)` is denied

    - #### create

          public ResourceContext create(String name)

      Create a new ResourceContext. A new empty ResourceContext with the specified name is created. The names of ResourceContexts must be unique. Use `close` to dispose of a ResourceContext.
      Parameters:
        `name` - a name for the ResourceContext
      Returns:
        a new ResourceContext
      Throws:
        `IllegalArgumentException` - if a ResourceContext with the name already exists.
        `UnsupportedOperationException` - if the number of ResourceContexts exceeds implementation limits

    - #### lookup

          public ResourceContext lookup(String name)

      Returns the ResourceContext given by name.
      Parameters:
        `name` - the name
      Returns:
        the ResourceContext given by name; `null` if there is no ResourceContext with the name

    - #### getThreadContext

          public ResourceContext getThreadContext()

      Returns the ResourceContext associated with the current thread.
      Returns:
        the ResourceContext associated with the current thread; the `unassigned context` if the thread is not associated with any context

    - #### getThreadContext

          public ResourceContext getThreadContext(Thread thread)

      Returns the ResourceContext associated with the thread.
      Parameters:
        `thread` - the thread to query
      Returns:
        the ResourceContext associated with the current thread; the `unassigned context` if the thread is not associated with any context

    - #### getResourceRequest

          public ResourceRequest getResourceRequest(ResourceType type)

      Returns the ResourceRequest for the current ResourceContext and ResourceType. If there is no ResourceContext associated with the current thread, the `unassigned context` is used.
      Parameters:
        `type` - the ResourceType of the resource making the request
      Returns:
        a ResourceRequest; `null` if there is no ResourceMeter with the type in the ResourceContext

    - #### getUnassignedContext

          public ResourceContext getUnassignedContext()

      Returns the ResourceContext that is the default when a thread is not associated with a ResourceContext.
      Returns:
        the unassigned ResourceContext

    - #### getTotalsContext

          public ResourceContext getTotalsContext()

      Returns a ResourceContext that provides the totals for all ResourceContexts. The meters reflect the sum of all other ResourceContexts plus the final counts of removed ResourceContexts. These meters are read only and are only updated by changes to active ResourceContexts.
      Returns:
        the totals ResourceContext

    - #### contexts

          public Stream<ResourceContext> contexts()

      Returns a Stream of the existing ResourceContexts.
      Returns:
        a Stream of the existing ResourceContexts

    - #### supportedResourceTypes

          public Set<ResourceType> supportedResourceTypes()

      Returns a read-only Set of the builtin ResourceTypes available in the current runtime.
      Returns:
        a read-only Set of the builtin ResourceTypes available in the current runtime; non-null

Copyright © 2014, 2016, Oracle and/or its affiliates. All rights reserved.