ホームページ  >  記事  >  Java  >  Java でのマルチスレッド プログラミング

Java でのマルチスレッド プログラミング

王林
王林オリジナル
2023-06-09 12:13:471619ブラウズ

Java におけるマルチスレッド プログラミング

Java はソフトウェア開発の分野で広く使用されているプログラミング言語であり、マルチスレッド プログラミングは Java の一般的なプログラミング モデルです。マルチスレッド プログラミングを使用すると、プログラムで複数のタスクを同時に実行できるようになり、プログラムの同時実行性と効率が向上します。この記事では、Java でのマルチスレッド プログラミングについて紹介します。

マルチスレッドの基本概念

マルチスレッドとは、複数のタスクを同時に実行できるプログラムの機能を指します。シングルコア CPU の場合、CPU が異なるタスク間を迅速に切り替えることによってマルチスレッドが実現されます。マルチコア CPU の場合、複数のタスクを異なる CPU コアで同時に実行できます。

Java でのマルチスレッドの実装

Java でのマルチスレッドは、軽量のスレッド実装を提供する Thread クラスのオブジェクトを作成することによって実現されます。スレッドは、Thread クラスを継承するか、Runnable インターフェイスを実装することによって作成できます。

  1. Thread クラスの継承

Thread クラスの継承は、それを実装する最も簡単な方法です。必要なのは、クラスを作成して Thread クラスを継承し、 run() メソッドを使用してそれを実現します。以下に示すように:

public class MyThread extends Thread {

    @Override
    public void run() {
        // 运行多线程的函数代码
    }
}

MyThread オブジェクトを作成し、start() メソッドを呼び出して新しいスレッドを開始します:

MyThread thread = new MyThread();
thread.start();
    #Runnable インターフェイスを実装します
  1. # Runnable インターフェイスの実装は、マルチスレッドを実装する方法でもあります。 run() メソッドを実装する必要がありますが、Runnable インターフェイス インスタンスを Thread クラスのコンストラクターに渡す必要があります。以下に示すように:
public class MyRunnable implements Runnable {

    @Override
    public void run() {
        // 运行多线程函数代码
    }
}

MyRunnable のスレッドを作成して開始します:

MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();

Java の Thread クラスには、スレッドのステータスと動作を監視および制御するための他のメソッドとプロパティがいくつか用意されています。たとえば、join()、yield()、sleep()、setPriority()、isAlive() などのメソッドです。

マルチスレッド同期

マルチスレッド プログラミングでは、複数のスレッドが同じリソースにアクセスできます。このとき、複数のスレッドが同じリソースを同時に変更してデータの混乱やエラーが発生するのを防ぐために、スレッドの同期と相互排他を確保する必要があります。 Java は、さまざまな同期メソッドを提供します。

同期されたコード ブロック
  1. synchronized キーワードを使用すると、メソッドまたはコード ブロックを同期済みとしてマークできるため、エントリが 1 つだけになるようになります。ブロックのスレッドはそのブロック内のコードを実行できます。以下に示すように:
public class SynchronizedThread {
    // 定义一个计数器
    private int count = 0;

    // 定义同步的方法
    public synchronized void addCount() {
        count++;
        System.out.println("count = " + count);
    }

    // 定义一个线程类来调用 addCount() 方法
    private static class MyThread extends Thread {
        private SynchronizedThread synchronizedThread;

        public MyThread(SynchronizedThread synchronizedThread) {
            this.synchronizedThread = synchronizedThread;
        }

        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                synchronizedThread.addCount();
            }
        }
    }

    public static void main(String[] args) {
        SynchronizedThread synchronizedThread = new SynchronizedThread();
        MyThread thread1 = new MyThread(synchronizedThread);
        MyThread thread2 = new MyThread(synchronizedThread);
        thread1.start();
        thread2.start();
    }
}

同期メソッド
  1. メソッドを同期済みとしてマークすると、メソッドは同期され、1 つのスレッドのみがそのメソッドに入ることができます。例:
public synchronized void addCount() {
    count++;
    System.out.println("count = " + count);
}

Lock クラス
  1. Lock は、Java のもう 1 つの同期メカニズムです。より柔軟なスレッド同期が提供され、複数のロック間の切り替えが容易になります。 Lock は java.util.concurrent.locks.Lock インターフェイスを実装し、次のメソッドを提供します:

lock(): ロックの取得を試行します。ロックがすでに占有されている場合、スレッドは待機します。ロックが取得されます。
  • unlock(): ロックを解放します。
  • tryLock(): ロックの取得を試みます。ロックがすでに占有されている場合は、すぐに false を返します。
  • newCondition(): このロックに関連する Condition インスタンスを返します。Condition の await() メソッドを呼び出す前に、スレッドはロックに関連付けられたオブジェクト モニター ロックを取得する必要があります。
  • 例:
Lock lock = new ReentrantLock();

public void addCount() {
    lock.lock();
    try {
        count++;
        System.out.println("count = " + count);
    } finally {
        lock.unlock();
    }
}

Java スレッド プール

Java のスレッド プールは、スレッドを管理および再利用するためのメカニズムです。スレッド プールは CPU パフォーマンスをより有効に活用し、スレッドの作成と破棄を減らし、プログラムの応答速度を向上させます。 Java では、ThreadPoolExecutor クラスを通じてスレッド プールを作成できます。スレッド プールのサイズやキューの長さなどのパラメーターを指定でき、さまざまなタスクを実行することもできます。

例:

ExecutorService threadPool = Executors.newFixedThreadPool(10);
threadPool.execute(new Runnable() {
    @Override
    public void run() {
        // 执行任务
    }
});

概要

Java でのマルチスレッド プログラミングは、プログラムの同時実行性と効率を向上させる重要な手段です。 Java でマルチスレッドを作成する 2 つの方法 (Thread クラスの継承と Runnable インターフェイスの実装) を紹介することに加えて、さまざまな同期メソッドと Java スレッド プールも紹介します。マルチスレッド プログラミングの基本概念と実装を理解することは、効率的で同時実行性の高いプログラムを開発するために重要です。

以上がJava でのマルチスレッド プログラミングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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