Threadは、プログラムの中で処理を進める実行の流れを表すクラスです。
Javaでは、1つのプログラムの中で複数の処理を並行して進めることがあります。その入口として出てくるのがThreadです。

Threadは『別の作業レーン』、Runnableは『そのレーンで実行する作業内容』と分けると読みやすくなります。
この記事では、Threadの意味、start()とrun()の違い、sleep()やjoin()の読み方、初心者が注意すべき範囲を整理します。
まず結論:Threadは実行の流れを表す
Threadは、プログラム内の実行の流れを表します。Java仮想マシンは、アプリケーション内で複数のスレッドを並行して実行できます。
次の図で、mainスレッドとは別にworkerスレッドが動くイメージを確認してください。

Threadを使うと、処理を同時並行に進められます。ただし、並行処理は順番や共有データの扱いが難しくなるため、初心者の段階ではまずコードの読み方に集中しましょう。
Threadを作って開始する基本
Threadには、実行したい処理をRunnableとして渡せます。start()を呼ぶと、Threadがスケジュールされ、内部でrun()が実行されます。
Runnable task = () -> {
System.out.println("worker start");
};
Thread thread = new Thread(task);
thread.start();
このコードでは、Runnableが作業内容で、Threadが実行の流れです。Runnableの基本はJava Runnableの記事で扱います。
次の図では、作業内容をThreadへ渡して開始する流れを確認してください。

実務では、Threadを直接大量に作るよりExecutorなどを使うこともあります。ただし、Threadの考え方を知っておくと、並行処理の入門記事やライブラリの説明が読みやすくなります。
startとrunの違い
start()とrun()の違いは、Thread学習で最初に押さえたいポイントです。start()は新しい実行の流れを開始します。run()を直接呼ぶと、普通のメソッド呼び出しになります。
| 呼び出し | 何が起きるか | 初心者向けの読み方 |
|---|---|---|
thread.start() | 新しいThreadとして実行される | 別レーンで開始 |
thread.run() | 現在の流れで普通に呼ばれる | ただのメソッド呼び出し |
task.run() | Runnableの中身を直接実行する | 並行実行ではない |
次の比較図で、start()とrun()の動きの違いを整理してください。

Threadを使ったつもりなのに並行実行にならない場合、run()を直接呼んでいないか確認しましょう。
sleepとjoinの読み方
Threadのコードでは、sleep()やjoin()もよく出てきます。まずは『待つ』という意味では似ていても、待ち方が違うと押さえます。
Thread thread = new Thread(() -> {
System.out.println("working");
});
thread.start();
thread.join(); // threadが終わるまで待つ
| メソッド | 意味 | 注意点 |
|---|---|---|
Thread.sleep(...) | 現在のThreadを一定時間止める | 例外処理が必要 |
thread.join() | 指定したThreadの終了を待つ | 待つ対象を意識する |
Thread.currentThread() | 今動いているThreadを取得する | デバッグで名前を見ることがある |
次の図では、workerが終わるまでmainが待つ流れを確認してください。

待つ処理が増えると、並行処理は一気に難しくなります。最初は、どのThreadが待っていて、どのThreadの終了を待っているのかを図にすると理解しやすくなります。
現在のJavaで知っておきたいこと
JavaのThread APIには、従来のプラットフォームスレッドだけでなく、仮想スレッドを作るためのBuilder APIも用意されています。初心者が最初に覚えるべきなのは、仮想スレッドの詳細ではなく、Threadが実行の流れを表し、start()で開始されるという土台です。
公式APIを読むときは、Threadの説明にプラットフォームスレッド、仮想スレッド、割り込みなど多くの要素が出てきます。この記事では、まず通常のコード読解に必要な最小範囲に絞っています。
Threadを使う場面
並行処理では、共有データの更新や例外処理も重要です。まずThreadの最小モデルを押さえたうえで、必要に応じてExecutorやsynchronizedなどへ進むと理解が崩れにくくなります。
実務コードで読むときのコツ
実務コードでThreadが出てきたら、最初に見るべきなのは『何を担当しているのか』です。名前だけを暗記するより、値を順番に取り出すのか、処理を渡すのか、別の実行の流れを作るのかを日本語に直す方が理解しやすくなります。
次に、型、呼び出しているメソッド、戻り値の3つを順番に確認します。型を見ると役割の範囲が分かり、メソッドを見るとその行で何をしたいのかが分かり、戻り値を見ると次の処理へどうつながるかが分かります。
この記事の範囲では、細かい内部実装をすべて覚えることよりも、初見のコードで立ち止まらないことを優先しています。必要になったら公式APIを確認しながら、まずは代表的な書き方を読める状態を作りましょう。
チーム開発では、同じ目的を複数の書き方で実現できることがあります。そのため『この書き方だけが正解』と覚えるのではなく、なぜその場面でそのクラスやインターフェースが選ばれているのかを考えるのが大切です。
サンプルコードと実務コードでは情報量が違います。実務コードでは、変数名、メソッド名、例外処理、戻り値の受け渡しが同時に出てきます。読み始めで混乱したら、まずこのページで扱った最小コードまで戻し、1行ずつ役割を書き出すと整理できます。
判断に迷ったときの基準
Threadを使うべきか迷ったときは、先に目的を言葉にしてみます。目的が曖昧なままコードを書き始めると、似たクラスや似た構文との違いが見えなくなります。
| 確認すること | 見るポイント |
|---|---|
| 扱いたい対象 | 値、一覧、処理、実行の流れなど何を扱うのか |
| 必要な操作 | 取り出す、渡す、開始する、待つ、変換するなど何をしたいのか |
| 既存記事との関係 | 基礎文法、コレクション、インターフェース、ラムダ式のどれにつながるか |
| 注意点 | 順番、戻り値、例外、状態変更、実行タイミングなど見落としやすい点 |
この4点を先に確認すると、単なる暗記ではなく、コードを読むための判断軸ができます。初心者向けの記事でも、この判断軸まで持てると次の応用記事へ進みやすくなります。
練習問題
理解を確認するために、次の観点でサンプルコードを自分で説明してみてください。実行できる環境がある場合は、少し値を変えて結果がどう変わるかも試すと定着しやすくなります。
練習では、正確な用語を最初から完璧に使う必要はありません。まずは『何を受け取り、何を実行し、どのタイミングで次へ進むのか』を自分の言葉で言えることを目標にしてください。
よくある疑問
最初から細かい仕様まで覚えるべき?
最初からすべてのメソッドや内部仕様を暗記する必要はありません。初心者の段階では、代表的な使い方、よくあるつまずき、既存記事とのつながりを押さえれば十分です。必要になったタイミングで公式APIを確認する習慣を作りましょう。
既存記事とは何が違う?
既存のJavaプログラム実行記事はコンパイルから実行までの流れが中心です。この記事は、プログラム内部で複数の実行の流れを扱うThreadに絞ります。
次に何を読めばよい?
次に読む記事は、本文末尾の内部リンクから選ぶのがおすすめです。基礎概念が不安なら親記事へ戻り、コードの応用を見たい場合は関連する文法やライブラリの記事へ進むと理解がつながります。
既存記事とあわせて読む順番
Javaプログラムの実行、Runnable、Thread、例外処理の順に読むと、処理がどこで始まり、どこで待ち、どこで失敗するかを追いやすくなります。
公式情報と関連して読みたい記事
まとめ
Threadは、Javaプログラムの中で処理を進める実行の流れを表すクラスです。
Threadを理解すると、Runnableや並行処理のサンプルコードで処理の流れを追いやすくなります。
