Especialização em Sistemas com Java 21 LTS • Capítulo 03


🎯 Visão Geral dos Exemplos Práticos

Neste laboratório prático, implementaremos exemplos corporativos completos explorando:

  1. Padrão Retry com Exponential Backoff em do-while: resiliência de conexão de rede com tentativas progressivas e jitter.
  2. Varredura de Matrizes com Laços Rotulados (labeled break/continue): saída imediata de aninhamentos complexos em processamento numérico.
  3. Iteração Segura e Evitação de ConcurrentModificationException: manipulação de coleções ativas com Iterator.remove() vs removeIf.

💻 Exemplo 01 — Algoritmo de Conexão com Retry Resiliente (do-while)

package com.empresa.repeticoes;

import java.util.Random;

/**
 * Mecanismo de conexão com política de retentativa e backoff exponencial.
 */
public class ConexaoResilienteService {

    private static final int MAX_TENTATIVAS = 4;
    private static final long DELAY_BASE_MS = 100;
    private static final Random RANDOM = new Random();

    public static boolean conectarClusterDatabase(String urlConexao) {
        int tentativa = 0;
        boolean conectado = false;
        long tempoEspera = DELAY_BASE_MS;

        System.out.printf("🔌 Estabelecendo conexão com o cluster: [%s]%n", urlConexao);

        do {
            tentativa++;
            System.out.printf("   [TENTATIVA %d/%d] Enviando pacote SYN... ", tentativa, MAX_TENTATIVAS);

            // Simula falha transitória nas 2 primeiras tentativas
            if (tentativa < 3) {
                System.out.println("❌ TIMEOUT / FALHA TRANSITÓRIA");
                try {
                    // Backoff exponencial: base * 2^(tentativa-1) + jitter aleatório
                    long jitter = RANDOM.nextInt(50);
                    long sleepTime = tempoEspera + jitter;
                    System.out.printf("   ⏳ Aguardando %d ms antes da próxima retentativa...%n", sleepTime);
                    Thread.sleep(sleepTime);
                    tempoEspera *= 2; // Dobra o tempo
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                    return false;
                }
            } else {
                System.out.println("✅ SUCESSO [ACK RECEBIDO]!");
                conectado = true;
            }

        } while (!conectado && tentativa < MAX_TENTATIVAS);

        return conectado;
    }

    public static void main(String[] args) {
        boolean sucesso = conectarClusterDatabase("jdbc:postgresql://db-cluster.corp.internal:5432/financeiro");
        System.out.printf("Status Final do Serviço de Banco: %s%n", sucesso ? "ONLINE (PRONTO)" : "OFFLINE (FALHA)");
    }
}

💻 Exemplo 02 — Processamento de Malha Bidimensional com Labeled Break

package com.empresa.repeticoes;

/**
 * Varredura matricial com detecção precoce de anomalia utilizando rótulos de controle.
 */
public class AnalisadorMalhaSensores {

    public static void main(String[] args) {
        // Matriz de temperaturas de sensores industriais (linhas = setores, colunas = máquinas)
        double[][] temperaturasSetores = {
            { 45.2, 48.0, 47.5, 49.1 },
            { 52.3, 54.0, 125.8, 51.0 }, // Sensor [1][2] superaqueceu (> 100°C)
            { 41.0, 42.5, 43.1, 40.8 }
        };

        final double LIMIAR_CRITICO = 100.0;
        int setorCritico = -1;
        int maquinaCritica = -1;
        double temperaturaAnomala = 0.0;

        System.out.println("================================================================================");
        System.out.println("         MONITORAMENTO INDUSTRIAL: VARREDURA DE MATRIZ COM LABELS               ");
        System.out.println("================================================================================");

        varreduraIndustrial:
        for (int setor = 0; setor < temperaturasSetores.length; setor++) {
            System.out.printf("🔍 Inspecionando Setor Industrial #%d...%n", setor + 1);

            for (int maq = 0; maq < temperaturasSetores[setor].length; maq++) {
                double temp = temperaturasSetores[setor][maq];

                if (temp >= LIMIAR_CRITICO) {
                    setorCritico = setor + 1;
                    maquinaCritica = maq + 1;
                    temperaturaAnomala = temp;
                    System.out.printf("🚨 [EMERGÊNCIA] Máquina #%d registrou %.1f°C! Interrupção de emergência!%n",
                            maquinaCritica, temp);
                    break varreduraIndustrial; // Interrompe imediatamente ambos os laços
                }

                System.out.printf("   Setor %d / Máquina %d: %.1f°C [OK]%n", setor + 1, maq + 1, temp);
            }
        }

        System.out.println("--------------------------------------------------------------------------------");
        if (setorCritico != -1) {
            System.out.printf("PARECER: Protocolo de resfriamento ativado no Setor %d, Máquina %d (%.1f°C).%n",
                    setorCritico, maquinaCritica, temperaturaAnomala);
        } else {
            System.out.println("PARECER: Todas as máquinas operando em níveis nominais.");
        }
        System.out.println("================================================================================");
    }
}

📋 Resultado Esperado no Console

🔌 Estabelecendo conexão com o cluster: [jdbc:postgresql://db-cluster.corp.internal:5432/financeiro]
   [TENTATIVA 1/4] Enviando pacote SYN... ❌ TIMEOUT / FALHA TRANSITÓRIA
   ⏳ Aguardando 124 ms antes da próxima retentativa...
   [TENTATIVA 2/4] Enviando pacote SYN... ❌ TIMEOUT / FALHA TRANSITÓRIA
   ⏳ Aguardando 238 ms antes da próxima retentativa...
   [TENTATIVA 3/4] Enviando pacote SYN... ✅ SUCESSO [ACK RECEBIDO]!
Status Final do Serviço de Banco: ONLINE (PRONTO)

================================================================================
         MONITORAMENTO INDUSTRIAL: VARREDURA DE MATRIZ COM LABELS               
================================================================================
🔍 Inspecionando Setor Industrial #1...
   Setor 1 / Máquina 1: 45.2°C [OK]
   Setor 1 / Máquina 2: 48.0°C [OK]
   Setor 1 / Máquina 3: 47.5°C [OK]
   Setor 1 / Máquina 4: 49.1°C [OK]
🔍 Inspecionando Setor Industrial #2...
   Setor 2 / Máquina 1: 52.3°C [OK]
   Setor 2 / Máquina 2: 54.0°C [OK]
🚨 [EMERGÊNCIA] Máquina #3 registrou 125.8°C! Interrupção de emergência!
--------------------------------------------------------------------------------
PARECER: Protocolo de resfriamento ativado no Setor 2, Máquina 3 (125.8°C).
================================================================================