ホームページ >Java >&#&チュートリアル >JAVA コア同時実行プログラミング モデルの実践ガイド
JAVA コア同時実行プログラミング モデル実践ガイド
今日のソフトウェア開発分野では、マルチコア プロセッサと分散システムが主流になっています。ハードウェア リソースを最大限に活用するには、並行プログラムを作成して並列処理を実現し、パフォーマンスを向上させる必要があります。主流のプログラミング言語として、JAVA は豊富な同時プログラミング モデルとツールのセットを提供します。この記事では、いくつかの具体的なコード例を通じて JAVA のコア同時プログラミング モデルを深く理解し、これらのモデルを使用して同時プログラミングを実践する方法を学びます。
public class MyThread extends Thread { @Override public void run() { System.out.println("Hello, this is my thread!"); } public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); } }
この例では、Thread を継承するカスタム スレッド クラス MyThread を作成し、run メソッドの Simple message に段落を出力するように run メソッドを書き換えます。 main メソッドでは、MyThread のインスタンスを作成し、start メソッドを通じてスレッドを開始します。
public class MyRunnable implements Runnable { @Override public void run() { System.out.println("Hello, this is my runnable!"); } public static void main(String[] args) { Thread myThread = new Thread(new MyRunnable()); myThread.start(); } }
この例では、Runnable インターフェイスを実装するカスタム クラス MyRunnable を作成し、run メソッドをオーバーライドしました。 main メソッドでは、Thread オブジェクトを作成し、MyRunnable のインスタンスをパラメータとして渡し、start メソッドを通じてスレッドを開始します。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(3); for (int i = 0; i < 5; i++) { Runnable worker = new WorkerThread("" + i); executor.execute(worker); } executor.shutdown(); while (!executor.isTerminated()) { } System.out.println("Finished all threads"); } } class WorkerThread implements Runnable { private String message; public WorkerThread(String s) { this.message = s; } public void run() { System.out.println(Thread.currentThread().getName() + " (Start) message = " + message); processMessage(); System.out.println(Thread.currentThread().getName() + " (End)"); } private void processMessage() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }
この例では、Executors ツール クラスを使用して、固定サイズ 3 のスレッド プールを作成します。次に、WorkerThread の 5 つのインスタンスを作成し、スレッド プールに送信しました。スレッド プールは、これらのスレッドの実行を管理します。
public class Counter { private int count = 0; public synchronized void increment() { count++; } public synchronized void decrement() { count--; } public synchronized int getCount() { return count; } }
この例では、Counter クラスを作成しました。このクラスでは、increment、decrement、および getCount メソッドはすべて、synchronized キーワードを使用して同期を実現します。これにより、複数のスレッドからのこれらのメソッドの呼び出しが安全になります。
さらに、JAVA の同時実行パッケージは、ReentrantLock や ReadWriteLock などのさまざまなロック実装も提供します。 ReentrantLock の使用例を次に示します。
import java.util.concurrent.locks.ReentrantLock; public class ReentrantLockExample { private final ReentrantLock lock = new ReentrantLock(); public void performTask() { lock.lock(); try { // 执行需要同步的代码块 } finally { lock.unlock(); } } }
この例では、ReentrantLock のインスタンスを作成し、lock と lock を使用してクリティカル セクションをロックおよびロック解除します。この方法は、synchronized キーワードよりも柔軟で、ロックの取得と解放を手動で制御できます。
import java.util.concurrent.ConcurrentHashMap; public class ConcurrentMapExample { private ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>(); public void addKeyValuePair(String key, String value) { map.put(key, value); } public String getValueByKey(String key) { return map.get(key); } }
この例では、ConcurrentHashMap インスタンスを作成し、put メソッドと get メソッドを使用して、追加の同期操作を必要とせずに Map 内のデータを安全に操作します。
上記の例を通じて、スレッドの基本、スレッド プール、ロックと同期、同時コレクションなど、JAVA のコア同時プログラミング モデルを深く理解できました。実際のプロジェクトでは、これらの同時プログラミング モデルを合理的に使用すると、プログラムのパフォーマンスと安定性を向上させることができます。この記事が、読者が JAVA での並行プログラミングの知識をよりよく習得し、実際に効率的な並行プログラムを作成するのに役立つことを願っています。
以上がJAVA コア同時実行プログラミング モデルの実践ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。