Proyek ini membangun pipeline pemrosesan data asinkron dengan JDK murni: berkas transaksi penjualan dibaca, divalidasi, ditransformasi, diagregasi, lalu dicetak sebagai laporan — lima tahap dengan kontrak data tegas berupa record dan interface sealed. Tahap validasi dan transformasi diparalelkan dengan ExecutorService, CompletableFuture, dan virtual threads: hasil dikumpulkan ke collection konkuren, ditunggu di gerbang allOf().join(), diurutkan kembali menurut nomor baris, baru dicetak oleh main — urutan keluaran selalu sama seperti jalur sekuensial.

Pipeline kemudian diberi ketahanan galat dan pengukuran performa. Galat dibedakan menjadi sementara — dicoba ulang dengan backoff eksponensial — dan tetap yang gagal cepat; setiap percobaan tercatat sebagai jejak terurut. Performa diukur lewat model biaya deterministik: biaya per tahap, throughput, profil kemacetan, dan dua strategi perbaikan, sehingga seluruh angka stabil dan bisa diuji otomatis.

Koordinasi thread dan ketahanan galat hanya terasah pada data yang besar dan tidak bersih. Tanpa kontrak data tegas, paralelisasi menukar kecepatan dengan galat yang sulit dilacak; tanpa kebijakan galat eksplisit, satu baris bermasalah meruntuhkan seluruh batch. Proyek ini melatih keduanya bertahap, dengan bukti hasil identik antar eksekusi sebagai ukuran kebenaran.

Prasyaratnya: ExecutorService dan virtual threads pada section Concurrency dan Multithreading, groupingBy dan reducing pada Stream API, custom exceptions dan exception chaining pada Exception Handling, serta Files utility pada File I/O dan NIO. Kerjakan empat bagian secara berurutan karena berkas inti berkembang antar bagian; setiap bagian memuat bundle .java lengkap — jalankan demo tiap bagian (misalnya java DemoPerforma.java) atau harness java UjiPipeline.java, dan keluarannya selalu sama di setiap eksekusi.