Rumah  >  Artikel  >  Java  >  Bagaimana untuk menggunakan kumpulan benang dengan cekap untuk melaksanakan pengaturcaraan serentak di Jawa?

Bagaimana untuk menggunakan kumpulan benang dengan cekap untuk melaksanakan pengaturcaraan serentak di Jawa?

王林
王林asal
2024-05-02 08:27:011183semak imbas

Bagaimana cara menggunakan kumpulan benang dengan berkesan untuk melaksanakan pengaturcaraan serentak di Jawa? Buat kumpulan benang dan pra-peruntukkan satu set benang. Serahkan tugasan kepada kumpulan benang, dan benang memperoleh tugasan daripada baris gilir untuk pelaksanaan. Benang dalam kumpulan benang bertanggungjawab untuk memperoleh dan melaksanakan tugas dalam baris gilir, dan tugasan yang telah selesai dipadamkan secara automatik daripada baris gilir.

如何在 Java 中高效使用线程池实现并发编程?

Cara menggunakan kumpulan benang secara berkesan untuk melaksanakan pengaturcaraan serentak dalam Java

Pengenalan kepada kumpulan benang

Kolam benang ialah struktur data khas yang digunakan untuk mengurus benang. Ia pra-peruntukkan satu set benang dan memperuntukkan benang daripadanya seperti yang diperlukan untuk melaksanakan tugas. Ini mengelakkan penciptaan dan pemusnahan benang yang kerap, dengan itu meningkatkan prestasi dan kecekapan.

Java Thread Pool

Thread pool di Jawa boleh dicipta oleh:

ExecutorService executor = Executors.newFixedThreadPool(5);

Antaranya, newFixedThreadPool mencipta kumpulan benang saiz tetap dengan 5 benang di dalamnya. newFixedThreadPool 创建了一个固定大小的线程池,其中有 5 个线程。

任务提交

可以通过以下方式将任务提交到线程池:

executor.submit(task);

其中,task 是要执行的任务。

任务执行

线程池中的线程负责从队列中获取任务并执行它们。执行完成的任务会自动从队列中删除。

实战案例

以下是一个使用线程池进行并发处理的示例:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class ThreadPoolExample {

    public static void main(String[] args) {
        // 创建一个固定大小的线程池
        ExecutorService executor = Executors.newFixedThreadPool(5);

        // 创建任务列表
        List<Integer> numbers = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            numbers.add(i);
        }

        // 将任务提交到线程池
        List<Future<Integer>> futures = new ArrayList<>();
        for (int number : numbers) {
            Future<Integer> future = executor.submit(() -> {
                return number * number;
            });
            futures.add(future);
        }

        // 获取任务结果
        List<Integer> results = new ArrayList<>();
        for (Future<Integer> future : futures) {
            try {
                results.add(future.get());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        // 关闭线程池
        executor.shutdown();
    }
}

在这个示例中,ThreadPoolExample 类:

  1. 创建一个有 5 个线程的线程池 (executor)。
  2. 创建一个包含 10000 个数字的列表 (numbers)。
  3. 将每个数字作为一个任务提交到线程池 (executor.sumbit)。
  4. 获取每个任务的结果并将其添加到 results
  5. Penyerahan tugas
🎜Tugas boleh diserahkan ke kumpulan benang melalui: 🎜rrreee🎜di mana, tugas ialah tugas yang perlu dilaksanakan. 🎜🎜🎜Pelaksanaan Tugas🎜🎜🎜Benang dalam kumpulan benang bertanggungjawab untuk mendapatkan tugas daripada baris gilir dan melaksanakannya. Tugasan yang telah selesai dialih keluar secara automatik daripada baris gilir. 🎜🎜🎜Kes praktikal🎜🎜🎜Berikut ialah contoh penggunaan kumpulan benang untuk pemprosesan serentak: 🎜rrreee🎜Dalam contoh ini, kelas ThreadPoolExample: 🎜
    🎜5Buat urutan dengan . benang Kolam benang (pelaksana). 🎜🎜Buat senarai 10,000 nombor (nombor). 🎜🎜Serahkan setiap nombor sebagai tugasan kepada kumpulan benang (executor.sumbit). 🎜🎜Dapatkan hasil setiap tugasan dan tambahkannya pada hasil. 🎜🎜Tutup kolam benang. 🎜🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan kumpulan benang dengan cekap untuk melaksanakan pengaturcaraan serentak di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn