

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Passar o contexto do segmento entre threads em um aplicativo multithreaded
<a name="xray-sdk-java-multithreading"></a>

**nota**  
Aviso de SDK/Daemon manutenção do X-Ray — Em 25 de fevereiro de 2026, o AWS X-Ray SDKs/Daemon entrará no modo de manutenção, onde AWS limitará as versões do X-Ray SDK e do Daemon para tratar apenas de problemas de segurança. Para obter mais informações sobre a linha do tempo do suporte, consulte [Cronograma de suporte do X-Ray SDK e do Daemon Support](xray-sdk-daemon-timeline.md). Recomendamos migrar para o. OpenTelemetry Para obter mais informações sobre a migração para OpenTelemetry, consulte [Migrando da instrumentação X-Ray para a instrumentação](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

Quando você cria um novo thread em seu aplicativo, o `AWSXRayRecorder` não mantém uma referência à [entidade](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/entities/Entity.html) do segmento atual ou subsegmento. Se você usar um cliente instrumentado no novo thread, o SDK tentará gravar em um segmento que não existe, causando uma. [SegmentNotFoundException](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/exceptions/SegmentNotFoundException.html)

Para evitar o lançamento de exceções durante o desenvolvimento, você pode configurar o gravador com um [ContextMissingStrategy](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/strategy/ContextMissingStrategy.html)que solicita que ele registre um erro em vez disso. Você pode configurar a estratégia no código com [SetContextMissingStrategy](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRayRecorder.html#setContextMissingStrategy(com.amazonaws.xray.strategy.ContextMissingStrategy)), ou configurar opções equivalentes com uma [variável de ambiente](xray-sdk-java-configuration.md#xray-sdk-java-configuration-envvars) ou [propriedade do sistema](xray-sdk-java-configuration.md#xray-sdk-java-configuration-sysprops).

Uma maneira de resolver o erro é usar um novo segmento chamando [beginSegment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRayRecorder.html#beginSegment(java.lang.String)) quando iniciar o thread e [endSegment](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/AWSXRayRecorder.html#endSegment--) quando fechá-lo. Isso funciona se você estiver instrumentando código que não seja executado em uma solicitação HTTP, como código que é executado quando seu aplicativo é iniciado.

Se usar vários threads para lidar com solicitações de entrada, você poderá passar o segmento ou subsegmento atual para o novo thread e fornecê-lo ao gravador global. Isso garante que as informações gravadas no novo thread sejam associadas ao mesmo segmento como o restante das informações gravadas sobre essa solicitação. Quando o segmento estiver disponível no novo thread, você poderá executar qualquer executável com acesso ao contexto desse segmento usando o método `segment.run(() -> { ... })`.

Consulte [Usar clientes instrumentais em threads de operador](scorekeep-workerthreads.md) para ver um exemplo.

## Usar o X-Ray com programação assíncrona
<a name="using-asynchronous-programming"></a>

 O X-Ray SDK for Java pode ser usado em programas Java assíncronos com. [SegmentContextExecutors](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/contexts/SegmentContextExecutors.html) O SegmentContextExecutor implementa a interface do Executor, o que significa que ela pode ser passada para todas as operações assíncronas de um. [CompletableFuture](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html) Isso garante que todas as operações assíncronas sejam executadas com o segmento correto no respectivo contexto. 

**Example Exemplo de App.java: Passando SegmentContextExecutor para CompletableFuture**  

```
DynamoDbAsyncClient client = DynamoDbAsyncClient.create();

AWSXRay.beginSegment();

// ...

client.getItem(request).thenComposeAsync(response -> {
    // If we did not provide the segment context executor, this request would not be traced correctly.
    return client.getItem(request2);
}, SegmentContextExecutors.newSegmentContextExecutor());
```