⚡ AutoSnippets PRO EN

Java: Produkcyjne Snippet'y Kodu

Produkcyjne wzorce Java: wielowątkowość, HTTP, obsługa plików, middleware servletów.

Python JavaScript TypeScript Java C# C++ Go PHP Rust SQL

Na tej stronie:

16. Java: Thread-Safe Singleton (DCL)

Java

Inicjalizacja leniwa z podwójnym sprawdzaniem blokady w środowisku wielowątkowym.

public class SecureSingleton {
    private static volatile SecureSingleton instance;
    private SecureSingleton() {}
    
    public static SecureSingleton getInstance() {
        if (instance == null) {
            synchronized (SecureSingleton.class) {
                if (instance == null) {
                    instance = new SecureSingleton();
                }
            }
        }
        return instance;
    }
}

Kiedy używać

Stosuj, gdy potrzebujesz dokładnie jednej instancji obiektu współdzielonej między wątkami (np. pula połączeń, konfiguracja).

Typowe pułapki

Double-checked locking wymaga słowa kluczowego volatile przy polu instance — bez niego można otrzymać częściowo zainicjalizowany obiekt.

17. Java: Pula Wątków i ExecutorService

Java

Asynchroniczne przetwarzanie paczek zadań z obsługą obiektów Future.

import java.util.concurrent.*;

public class TaskProcessor {
    public static void run() {
        ExecutorService executor = Executors.newFixedThreadPool(4);
        Future future = executor.submit(() -> {
            Thread.sleep(1000);
            return "Wynik zadania w tle";
        });
        executor.shutdown();
    }
}

Kiedy używać

Używaj zamiast ręcznego tworzenia wątków (`new Thread()`) przy przetwarzaniu wielu zadań w tle — łatwiej kontrolować zasoby.

Typowe pułapki

Brak wywołania executor.shutdown() powoduje, że aplikacja nie kończy działania, bo wątki puli pozostają aktywne.

18. Java: Nowoczesny HttpClient

Java

Zaawansowane zapytanie sieciowe z użyciem natywnego API w Javie.

import java.net.URI;
import java.net.http.*;

public class ApiClient {
    public static String get(String url) throws Exception {
        HttpClient client = HttpClient.newBuilder().build();
        HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).build();
        HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
        return response.body();
    }
}

Kiedy używać

Zalecany zamiast starszego HttpURLConnection przy komunikacji z zewnętrznymi API w nowoczesnych aplikacjach Java 11+.

Typowe pułapki

Domyślny klient nie ma ustawionego timeoutu — przy wolnym lub martwym serwerze żądanie może wisieć bardzo długo.

19. Java: Filtr Żądań Servlet (Middleware)

Java

Przechwytywanie ruchu HTTP, logowanie czasu wykonania i walidacja.

import jakarta.servlet.*;
import java.io.IOException;

public class LoggingFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
            throws IOException, ServletException {
        long start = System.currentTimeMillis();
        chain.doFilter(req, res);
        long duration = System.currentTimeMillis() - start;
        System.out.println("Czas zapytania: " + duration + "ms");
    }
}

Kiedy używać

Przydatne do logowania czasu odpowiedzi, autoryzacji czy wspólnej walidacji dla wielu endpointów naraz.

Typowe pułapki

Filtr, który nie wywoła chain.doFilter(), zablokuje całe żądanie — łatwo o to zapomnieć przy dodawaniu wczesnych warunków return.

20. Java: Bezpieczna Obsługa Plików (NIO)

Java

Wydajne kopiowanie i buforowanie dużych plików strumieniowo.

import java.nio.file.*;

public class FileManager {
    public static void copy(String source, String target) throws Exception {
        Path srcPath = Paths.get(source);
        Path destPath = Paths.get(target);
        Files.copy(srcPath, destPath, StandardCopyOption.REPLACE_EXISTING);
    }
}

Kiedy używać

Stosuj przy operacjach na dużych plikach, gdzie starsze API (java.io.File) bywa wolniejsze i mniej elastyczne.

Typowe pułapki

REPLACE_EXISTING nadpisuje plik docelowy bez ostrzeżenia — jeśli zależy Ci na bezpieczeństwie danych, sprawdź istnienie pliku przed kopiowaniem.