Java で Thread を使用する方法、具体的なコード例
次は、2 つのメソッドを使用してスレッドを作成するコード例です。
// 继承Thread类 class MyThread extends Thread { public void run(){ // 线程执行的代码 } } // 实现Runnable接口 class MyRunnable implements Runnable { public void run(){ // 线程执行的代码 } } // 创建线程并启动 public static void main(String[] args){ // 创建继承Thread类的线程 MyThread thread1 = new MyThread(); thread1.start(); // 创建实现Runnable接口的线程 MyRunnable runnable = new MyRunnable(); Thread thread2 = new Thread(runnable); thread2.start(); }
上記のコードでは、Thread クラスを継承して作成されたスレッドは、start メソッドを直接呼び出します。 Runnable インターフェイスを実装することによって作成されたスレッドは、最初に Thread オブジェクトを作成し、Runnable インターフェイスを実装するオブジェクトをパラメータとして Thread コンストラクターに渡してから、Thread オブジェクトの start メソッドを呼び出して開始する必要があります。スレッド。
以下は、スレッドのライフサイクルを示す簡単な例です:
class MyThread extends Thread { public void run(){ System.out.println("线程执行中"); try { Thread.sleep(1000); // 线程等待1秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程执行结束"); } } public static void main(String[] args){ MyThread thread = new MyThread(); System.out.println("线程状态:" + thread.getState()); // 输出线程状态为New thread.start(); System.out.println("线程状态:" + thread.getState()); // 输出线程状态为Runnable // 等待线程执行结束 try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程状态:" + thread.getState()); // 输出线程状态为Terminated }
上記のコードでは、新しいスレッドが作成されて開始された後、スレッドのステータスは次のようになります。最初の出力は New で、その後の出力ステータスは Runnable です。 thread.join() メソッドを呼び出し、スレッドの実行が終了するのを待った後、最終的な出力ステータスは Terminated になります。
Java は、スレッドの同期と相互排他を実現するために、synchronized キーワードや Lock インターフェイスなどのメカニズムを提供します。以下は、スレッド同期に synchronized キーワードを使用する例です。
class Counter { private int count = 0; // 线程安全的方法 public synchronized void increment(){ count++; } public int getCount(){ return count; } } public static void main(String[] args){ Counter counter = new Counter(); Runnable runnable = () -> { for(int i=0; i<10000; i++){ counter.increment(); } }; Thread thread1 = new Thread(runnable); Thread thread2 = new Thread(runnable); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("计数器的值:" + counter.getCount()); // 输出:20000 }
上記のコード例では、スレッド セーフな Counter クラスが定義されており、increment メソッドは synchronized キーワードを使用して共有データを同期します。 2 つのスレッドが同時に Counter オブジェクトを呼び出し、各スレッドがカウントに対して 10,000 回のインクリメント操作を実行し、最終的に正しい結果 20,000 を出力しました。
以下は、スレッドを中断する方法を示すサンプル コードです:
class MyThread extends Thread { public void run(){ while(!isInterrupted()){ System.out.println("线程运行中"); try { Thread.sleep(1000); // 线程等待1秒 } catch (InterruptedException e) { e.printStackTrace(); break; } } System.out.println("线程中断"); } } public static void main(String[] args){ MyThread thread = new MyThread(); thread.start(); try { Thread.sleep(5000); // 主线程等待5秒 } catch (InterruptedException e) { e.printStackTrace(); } thread.interrupt(); // 中断线程 }
上記のコードでは、新しいスレッドが作成されて開始された後、メイン スレッドは 5 分間待機します。秒 その後、子スレッドが中断されます。
概要:
この記事では、Java での Thread クラスの使用法を紹介し、いくつかの具体的なコード例を示します。 Thread クラスを継承するか Runnable インターフェイスを実装することでスレッドを作成し、start メソッドを呼び出してスレッドを開始できます。スレッドのライフサイクルと、スレッドの同期と相互排除の概念を理解することは、堅牢なマルチスレッド プログラムを作成するために非常に重要です。同時に、スレッドを中断する方法を理解することも、マルチスレッド プログラミングにおける重要な知識ポイントです。これらの内容をマスターすると、開発者がマルチスレッド プログラミングを使用してプログラムの効率と同時実行性を向上させるのに役立ちます。
以上がJavaでスレッドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。