スレッドを実行する – Threadクラス/Runnableインターフェイス
スレッドを実行するには、Threadクラス(java.langパッケージ)を継承したサブクラスを用意する方法と、Runnableインターフェイス(java.langパッケージ)を実装したサブクラスを用意する方法とがあります。初期のJavaから用意されている原始的なスレッドの実行方法です。
Threadクラス
スレッドで処理すべき内容は、Threadクラスのrunメソッドに定義します(ここでは20回メッセージを出力)。定義したスレッドを出力するには、Thread#startメソッドを呼び出します。
ThreadSample.java
- package com.example.mynavi.thread;
- public class ThreadSample {
- private static class MyThread extends Thread {
- @Override
- public void run() {
- for (var i = 0; i < 20; i++) {
- System.out.println(i + ":" + this.hashCode());
- }
- }
- }
- public static void main(String args) {
- var t1 = new MyThread();
- var t2 = new MyThread();
- t1.start();
- t2.start();
- }
- }
↓
- 0:1721540332
- 1:1721540332
- 2:1721540332
- 3:1721540332
- 0:616192395
- 4:1721540332
- 1:616192395
- 2:616192395
- 3:616192395
- 4:616192395
- 5:616192395
- 6:616192395
- 7:616192395
- 8:616192395
- 9:616192395
- 5:1721540332
- 6:1721540332
- 7:1721540332
- 8:1721540332
- 9:1721540332
- 10:1721540332
- ...後略...
Runnnableインターフェイス
スレッド処理を、Runnableインターフェイスの実装クラスとして定義することもできます。その場合、Runnable実装クラスのインスタンスを引数にThreadクラスをインスタンス化します。
RunableSample.java
- package com.example.mynavi.thread;
- public class RunableSample {
- private static class MyThread implements Runnable {
- @Override
- public void run() {
- for (var i = 0; i < 20; i++) {
- System.out.println(i + ":" + this.hashCode());
- }
- }
- }
- public static void main(String args) {
- var t1 = new Thread(new MyThread());
- var t2 = new Thread(new MyThread());
- t1.start();
- t2.start();
- }
- }
- スレッド_目次
- 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万部を超える。