Prinsip dasar multi-threading

Optimasi Kode di Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Eksekusi sekuensial vs paralel

  • Pemrosesan sekuensial -> operasi berjalan satu per satu
  • Pemrosesan paralel -> banyak operasi berjalan bersamaan

Bagaimana?

  • CPU modern punya banyak core
  • Thread: unit eksekusi program terkecil
  • Multi-threading membagi kerja ke beberapa core

Single-threading seperti jalan satu lajur; mobil harus berbaris. Multi-threading seperti banyak lajur; mobil bisa melaju bersamaan!

Optimasi Kode di Java

Menggunakan thread

  • Kelas Thread memungkinkan membuat jalur eksekusi baru
  • Tiap Thread dapat berjalan mandiri
Runnable task = () -> {
    System.out.println("Processing on thread: " + 
                       Thread.currentThread().getName());
};

Thread thread = new Thread(task);
thread.start();
Processing on thread: Thread-0
Optimasi Kode di Java

Bekerja dengan banyak thread

List<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < 4; i++) {
    Thread thread = new Thread(() -> System.out.println("Processing data on Thread-" + i));
    threads.add(thread);
    thread.start();
}

for (Thread t : threads) {
    t.join(); // Waits for all threads to complete
}
// Processing data on Thread-0
// Processing data on Thread-2
// Processing data on Thread-1
// Processing data on Thread-3
Optimasi Kode di Java

Parallel stream

  • Stream - fitur Java 8+ untuk paralelisme yang lebih mudah
  • Otomatis menangani pembuatan dan manajemen thread
  • Dua cara membuat:
    • collection.parallelStream()
    • Stream.of(...).parallel()
Optimasi Kode di Java

Contoh parallel stream

// Sequential processing
List<Integer> result1 = new ArrayList<>();
for (int i = 0; i < numbers.size(); i++) {
    result1.add(numbers.get(i) * 2);
}

// Sequential processing with stream List<Integer> result2 = numbers.stream() .map(n -> n * 2) .collect(Collectors.toList());
// Parallel processing with parallel stream List<Integer> result3 = numbers.parallelStream() .map(n -> n * 2) .collect(Collectors.toList());
Optimasi Kode di Java

Kapan memakai pemrosesan paralel

  • Operasi intensif CPU
  • Pemrosesan data independen
  • Koleksi data besar
  • Core CPU tersedia > 1
  • Overhead paralelisasi bisa tidak sepadan untuk:
    • Dataset kecil
    • Operasi sederhana
Optimasi Kode di Java

Ringkasan

  • Kelas Thread untuk membuat jalur eksekusi paralel
  • Parallel stream untuk memproses koleksi secara ringkas
  • Manfaat bergantung pada:
    • Jenis beban kerja
    • Ukuran data
    • Jumlah core tersedia
Optimasi Kode di Java

Ayo berlatih!

Optimasi Kode di Java

Preparing Video For Download...