ホームページ >Java >&#&チュートリアル >Javaの基礎から実践への入門: 並行プログラミングの実践的な詳細な説明

Javaの基礎から実践への入門: 並行プログラミングの実践的な詳細な説明

王林
王林オリジナル
2024-05-08 09:03:02617ブラウズ

Java コンカレント プログラミング コンカレント プログラミングの実践的な詳細説明: アプリケーションのパフォーマンスを向上させるマルチスレッド並列データ処理テクノロジ。 Java 同時実行メカニズム: スレッド: タスクを並列実行できる軽量の実行ユニット。ロック: 共有リソースへのアクセスを同期して、同時操作を回避します。アトミック操作: 中断はなく、すべて成功するかすべて失敗します。同時コレクション: マルチスレッド操作を可能にするスレッドセーフなコレクション クラス。実際のケース: Web ページのマルチスレッド クロールでは、ExecutorService と CompletionService を使用してスレッドを管理し、結果を収集してクロールの効率を向上させます。

Javaの基礎から実践への入門: 並行プログラミングの実践的な詳細な説明

Java 並行プログラミングの実践的な詳細な説明

はじめに

並行プログラミングは、データをマルチスレッドで並列処理するためのテクノロジであり、アプリケーションのパフォーマンスを大幅に向上させることができます。 Java には、スレッド、ロック、アトミック操作、同時コレクションなどの複数の同時実行メカニズムがあります。

スレッド

スレッドは、タスクを並列実行できる軽量の実行ユニットです。スレッドを作成するには、Thread クラスを使用するか、Runnable インターフェイスを実装します。 Thread类或实现Runnable接口。

// 使用 Thread 类创建线程
Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello from thread!");
    }
});

// 使用 Runnable 创建线程
Runnable runnable = () -> System.out.println("Hello from runnable!");
Thread thread = new Thread(runnable);

锁用于同步对共享资源的访问,防止多个线程同时操作同一数据。Java中常用的锁是synchronized关键字和ReentrantLock类。

原子操作

原子操作是一种不可中断的操作,要么全部执行成功,要么全部失败。Java中提供了AtomicInteger等原子类来封装基本类型操作,以确保线程安全。

并发集合

并发集合是线程安全的集合类,允许多个线程同时访问和修改数据,而无需显式同步。常用的并发集合包括ConcurrentHashMapCopyOnWriteArrayList

实战案例:多线程爬取网页

下面是一个使用多线程爬取网页的实战案例:

import java.util.concurrent.*;
import java.util.List;

public class WebCrawler {

    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(10);
        CompletionService<String> completionService = new ExecutorCompletionService<>(executor);

        List<String> urls = List.of("url1", "url2", "url3", ..., "urlN");

        for (String url : urls) {
            completionService.submit(() -> fetchPage(url));
        }

        executor.shutdown();
        executor.awaitTermination(1, TimeUnit.DAYS);

        for (int i = 0; i < urls.size(); i++) {
            try {
                String page = completionService.take().get();
                System.out.println("Fetched page: " + page);
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
            }
        }
    }

    private static String fetchPage(String url) {
        // 模拟爬取网页操作
        return "Page content for " + url;
    }
}

在这个案例中,多个线程并行爬取网页,提高了爬取效率。CompletionServicerrreee

🎜ロック🎜🎜🎜ロックは、共有リソースへのアクセスを同期し、複数のスレッドが同じデータを同時に操作するのを防ぐために使用されます。 Java で一般的に使用されるロックは、synchronized キーワードと ReentrantLock クラスです。 🎜🎜🎜アトミック操作🎜🎜🎜アトミック操作は、すべてが正常に実行されるか、すべてが失敗するかのいずれかの中断のない操作です。 Java は、スレッドの安全性を確保するために基本的な型操作をカプセル化する AtomicInteger などのアトミック クラスを提供します。 🎜🎜🎜同時コレクション🎜🎜🎜 同時コレクションは、明示的な同期を行わずに複数のスレッドが同時にデータにアクセスして変更できるようにするスレッドセーフなコレクション クラスです。一般的に使用される同時コレクションには、ConcurrentHashMapCopyOnWriteArrayList が含まれます。 🎜🎜🎜実際のケース: Web ページのマルチスレッド クロール🎜🎜🎜 以下は、マルチスレッドを使用して Web ページをクロールする実際のケースです: 🎜rrreee🎜 この場合、複数のスレッドが Web ページを並行してクロールするため、クロール効率。 CompletionService は、スレッドから返された結果を収集および管理するために使用され、マルチスレッド管理の複雑さを回避します。 🎜

以上がJavaの基礎から実践への入門: 並行プログラミングの実践的な詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。