0Pricing
Java Academy · Pelajaran

Membuat Stream Paralel

parallel() dan parallelStream().

Membuat Stream Paralel adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Cara Kerja Aliran Paralel

Aliran parallel membagi datanya dan memproses bagian-bagian pada beberapa utas, lalu menggabungkan hasilnya. Tujuannya adalah mencapai laju pemrosesan yang lebih tinggi pada beban kerja besar.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int sum = IntStream.rangeClosed(1, 1000)
            .parallel()
            .sum();
        System.out.println(sum);
    }
}

parallel() pada Aliran yang Sudah Ada

Memanggil parallel() mengubah aliran berurutan menjadi aliran parallel. Pemanggilan ini dapat ditempatkan di mana saja dalam alur pemrosesan.

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> nums = List.of(1, 2, 3, 4, 5);
        int total = nums.stream()
            .parallel()
            .mapToInt(Integer::intValue)
            .sum();
        System.out.println(total);
    }
}

parallelStream() pada Koleksi

Collection.parallelStream() membuat aliran parallel secara langsung, sebagai jalan pintas dari stream().parallel().

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> words = List.of("a", "bb", "ccc");
        int chars = words.parallelStream()
            .mapToInt(String::length)
            .sum();
        System.out.println(chars);
    }
}

Kembali ke Eksekusi Berurutan

sequential() mengembalikan aliran ke eksekusi satu utas. Pemanggilan terakhir antara parallel() dan sequential() yang berlaku untuk seluruh alur pemrosesan.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int sum = IntStream.rangeClosed(1, 100)
            .parallel()
            .sequential()
            .sum();
        System.out.println(sum);
    }
}

Memeriksa isParallel

isParallel() melaporkan apakah aliran akan dieksekusi secara parallel.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        System.out.println(IntStream.range(0, 10).isParallel());
        System.out.println(IntStream.range(0, 10).parallel().isParallel());
    }
}

Hasil Sama, Eksekusi Berbeda

Untuk operasi asosiatif seperti penjumlahan, aliran parallel dan sequential mengembalikan hasil yang sama. Yang berbeda hanyalah strategi eksekusinya.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int seq = IntStream.rangeClosed(1, 50).sum();
        int par = IntStream.rangeClosed(1, 50).parallel().sum();
        System.out.println(seq == par);
    }
}

ForkJoinPool Umum

Aliran parallel menggunakan ForkJoinPool.commonPool() bersama. Ukuran bawaannya adalah jumlah prosesor yang tersedia dikurangi satu.

public class Main {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().availableProcessors());
    }
}

Urutan Utas Tidak Dijamin

Dengan forEach, aliran parallel dapat mencetak dalam urutan apa pun karena bagian-bagian data selesai pada waktu yang berbeda. Gunakan forEachOrdered jika urutan penting.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        IntStream.rangeClosed(1, 5)
            .parallel()
            .forEachOrdered(System.out::println);
    }
}

Reduksi Menggabungkan Hasil Parsial

Di balik layar, reduksi parallel menghitung hasil parsial untuk setiap bagian data dan menggabungkannya dengan penggabung. Operasinya harus asosiatif agar hasilnya benar.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int product = IntStream.rangeClosed(1, 6)
            .parallel()
            .reduce(1, (a, b) -> a * b);
        System.out.println(product);
    }
}

Mengumpulkan Secara Paralel

Kerangka kolektor mendukung pengumpulan secara parallel dengan menggabungkan wadah parsial. groupingBy bekerja dengan benar secara parallel.

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> words = List.of("apple", "banana", "avocado", "cherry");
        Map<Character, List<String>> byFirst = words.parallelStream()
            .collect(Collectors.groupingBy(w -> w.charAt(0)));
        System.out.println(byFirst);
    }
}

Tidak Semua Aliran Menjadi Lebih Cepat

Mengaktifkan paralelisme itu mudah, tetapi tidak selalu bermanfaat. Kumpulan data kecil atau operasi ringan dapat berjalan lebih lambat secara parallel karena adanya beban tambahan untuk membagi dan menggabungkan data.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        long count = IntStream.rangeClosed(1, 10)
            .parallel()
            .filter(n -> n % 2 == 0)
            .count();
        System.out.println(count);
    }
}

Pemeriksaan Singkat

Kumpulan utas mana yang secara bawaan mengeksekusi aliran parallel?

Rangkuman

Anda telah membuat aliran parallel:

  • parallel() mengubah aliran apa pun; parallelStream() adalah jalan pintas untuk koleksi.
  • sequential() mengembalikan aliran ke kondisi semula; pemanggilan terakhir yang berlaku.
  • Aliran tersebut berjalan pada ForkJoinPool.commonPool() bersama.
  • Hasilnya sama dengan aliran sequential untuk operasi asosiatif, tetapi urutan dan kecepatannya tidak dijamin.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membuat Stream Paralel” gratis?

Ya — teks lengkap “Membuat Stream Paralel” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membuat Stream Paralel”?

parallel() dan parallelStream(). Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Membuat Stream Paralel” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membuat Stream Paralel
  2. Kapan Paralelisme Membantu
  3. Keamanan Thread dan Efek Samping
  4. Kesalahan Umum
← Kembali ke Java Academy