注目記事

【Javaコード入門】スレッド_①Threadクラス/Runnableインターフェイス

スレッドを実行する – Threadクラス/Runnableインターフェイス

スレッドを実行するには、Threadクラス(java.langパッケージ)を継承したサブクラスを用意する方法と、Runnableインターフェイス(java.langパッケージ)を実装したサブクラスを用意する方法とがあります。初期のJavaから用意されている原始的なスレッドの実行方法です。

Threadクラス

スレッドで処理すべき内容は、Threadクラスのrunメソッドに定義します(ここでは20回メッセージを出力)。定義したスレッドを出力するには、Thread#startメソッドを呼び出します。

ThreadSample.java
  1. package com.example.mynavi.thread;
  2.  
  3. public class ThreadSample {
  4.   private static class MyThread extends Thread {
  5.       @Override
  6.       public void run() {
  7.         for (var i = 0; i < 20; i++) {
  8.           System.out.println(i + ":" + this.hashCode());
  9.         }
  10.       }
  11.     }
  12.      
  13.     public static void main(String args) {
  14.       var t1 = new MyThread();
  15.       var t2 = new MyThread();
  16.       t1.start();
  17.       t2.start();
  18.     }
  19.   }

  1. 0:1721540332
  2. 1:1721540332
  3. 2:1721540332
  4. 3:1721540332
  5. 0:616192395
  6. 4:1721540332
  7. 1:616192395
  8. 2:616192395
  9. 3:616192395
  10. 4:616192395
  11. 5:616192395
  12. 6:616192395
  13. 7:616192395
  14. 8:616192395
  15. 9:616192395
  16. 5:1721540332
  17. 6:1721540332
  18. 7:1721540332
  19. 8:1721540332
  20. 9:1721540332
  21. 10:1721540332
  22. ...後略...

Runnnableインターフェイス

スレッド処理を、Runnableインターフェイスの実装クラスとして定義することもできます。その場合、Runnable実装クラスのインスタンスを引数にThreadクラスをインスタンス化します。

RunableSample.java
  1. package com.example.mynavi.thread;
  2.  
  3. public class RunableSample {
  4.   private static class MyThread implements Runnable {
  5.       @Override
  6.       public void run() {
  7.         for (var i = 0; i < 20; i++) {
  8.           System.out.println(i + ":" + this.hashCode());
  9.         }
  10.       }
  11.     }
  12.  
  13.     public static void main(String args) {
  14.       var t1 = new Thread(new MyThread());
  15.       var t2 = new Thread(new MyThread());
  16.       t1.start();
  17.       t2.start();
  18.     }
  19.   }
スレッド_目次
Threadクラス/Runnableインターフェイス
synchronized修飾子/ブロック
ReentrantLockクラス
AtomicXxxxxクラス
Executorsクラス

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。