Menyesuaikan Kolam Benang untuk Java 8 Aliran Selari
Java 8 memperkenalkan aliran selari, menawarkan keselarian yang cekap untuk operasi intensif data. Walau bagaimanapun, menentukan kumpulan benang tersuai untuk aliran selari kekal sebagai ciri yang sukar difahami. Artikel ini menangani isu ini, mengemukakan penyelesaian menggunakan ForkJoinPool.
Satu kebimbangan utama dengan kumpulan benang lalai ialah potensi untuk menyekat kelakuan. Tugas yang berjalan perlahan dalam satu aliran boleh menghalang pelaksanaan dalam aliran selari yang lain. Ini amat bermasalah dalam aplikasi berbilang benang di mana pengasingan adalah penting.
Untuk mengatasi had ini, anda boleh membuat ForkJoinPool khusus untuk setiap tugas. Setelah melaksanakan strim selari sebagai tugas berasingan dalam ForkJoinPool itu, strim itu kekal terpencil, menggunakan kumpulan benang yang ditentukan dan bukannya yang lalai.
Pertimbangkan coretan kod berikut:
final int parallelism = 4; ForkJoinPool forkJoinPool = null; try { forkJoinPool = new ForkJoinPool(parallelism); final List<Integer> primes = forkJoinPool.submit(() -> IntStream.range(1, 1_000_000).parallel() .filter(PrimesPrint::isPrime) .boxed().collect(Collectors.toList()) ).get(); System.out.println(primes); } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e); } finally { if (forkJoinPool != null) { forkJoinPool.shutdown(); } }
Kod ini mencipta ForkJoinPool baharu dengan selari tertentu dan melaksanakan aliran selari di dalamnya. Strim selari beroperasi dalam kumpulan terpencilnya, menghalang sebarang kemungkinan gangguan daripada utas lain.
Pendekatan ini memberikan kawalan yang lebih besar ke atas peruntukan utas, membolehkan pembangun membahagikan strim selari dan memastikan kecekapan sumber dalam aplikasi berbilang benang.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan Kolam Benang untuk Aliran Selari Java 8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!