カテゴリ: Java 更新日: 2026/01/13
PR
独学でJavaを学んでいる方向け
「実務レベルに到達できるか不安」「1人だと詰まることが多い」場合は、 実践重視で学べる環境を一度確認しておくのも一つの手です。
EBAエデュケーション |学習内容・サポートを見る

Javaのラムダ式でスレッド処理!RunnableとCallableの書き方を徹底解説

【ラムダ式】スレッドで使う:Runnable/Callableの書き方(thread対応)
【ラムダ式】スレッドで使う:Runnable/Callableの書き方(thread対応)

先生と生徒の会話形式で理解しよう

生徒

「Javaでスレッドを使いたいんですが、ラムダ式でも書けるって本当ですか?」

先生

「そうだね。ラムダ式を使えば、スレッド処理もすっきり簡潔に書けるようになるよ。特にRunnableCallableの書き方が変わってくるんだ。」

生徒

「それってどうやって使い分ければいいんですか?」

先生

「それじゃあ、Javaのラムダ式を使ってスレッド処理を書く方法と、RunnableCallableの違いを一緒に見ていこう!」

1. Runnableとは?Javaでのスレッドの基本

1. Runnableとは?Javaでのスレッドの基本
1. Runnableとは?Javaでのスレッドの基本

Runnableは、Javaでスレッドを実行するための代表的なインターフェースです。run()メソッドを実装することで、非同期で処理を実行できます。ラムダ式を使えば、コードをすっきり書くことができます。


Thread thread = new Thread(() -> {
    System.out.println("スレッドで処理を実行中...");
});
thread.start();

このように、従来は匿名クラスで長々と書いていたコードが、ラムダ式を使うことで数行にまとまります。

2. Callableとは?戻り値が欲しいときのスレッド処理

2. Callableとは?戻り値が欲しいときのスレッド処理
2. Callableとは?戻り値が欲しいときのスレッド処理

Callableは、Runnableとよく似ていますが、戻り値を返せるという違いがあります。Runnableでは戻り値がないのに対して、Callableは処理結果を返すことができます。


Callable<String> task = () -> {
    return "スレッド完了!";
};

このように、Callableはラムダ式でも記述でき、ExecutorServiceと組み合わせて実行します。

PR

将来を見据えて、+αのスキルを身につけたい方へ

JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。

AIを学ぶならアイデミープレミアム

3. ExecutorServiceでスレッドを実行する方法

3. ExecutorServiceでスレッドを実行する方法
3. ExecutorServiceでスレッドを実行する方法

CallableThreadで直接実行できないため、ExecutorServiceを使って実行します。実行結果はFutureで受け取ります。


ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> {
    return "処理が完了しました!";
});
String result = future.get(); // 戻り値を取得
System.out.println(result);
executor.shutdown();

Future.get()は処理が終わるまで待機し、結果を取得します。例外処理を忘れずに入れましょう。

4. RunnableとCallableの違いを比較

4. RunnableとCallableの違いを比較
4. RunnableとCallableの違いを比較

RunnableCallableの違いを簡単に比較してみましょう。

項目 Runnable Callable
戻り値 なし あり
例外処理 チェック例外をスローできない チェック例外をスローできる
実行方法 Thread、Executor Executor経由
利用シーン 簡単な並列処理 戻り値が必要な処理

5. Javaのラムダ式はRunnable・Callableと相性抜群

5. Javaのラムダ式はRunnable・Callableと相性抜群
5. Javaのラムダ式はRunnable・Callableと相性抜群

RunnableCallableはどちらも「関数型インターフェース」なので、Javaのラムダ式と相性が良いです。関数型インターフェースとは、抽象メソッドが1つだけのインターフェースのことです。

つまり、() -> { 処理 }の形でラムダ式を使うことができ、より簡潔にスレッド処理が書けるようになります。

6. スレッドの非同期処理で活躍するJavaのラムダ式

6. スレッドの非同期処理で活躍するJavaのラムダ式
6. スレッドの非同期処理で活躍するJavaのラムダ式

非同期処理とは、別スレッドで処理を行い、他の処理をブロックせずに並行して動かすテクニックです。GUIアプリやWebアプリでは、レスポンスを保ったまま時間のかかる処理を実行するために使われます。

JavaではThreadExecutorServiceを使った非同期処理が主流で、ラムダ式を組み合わせることで、コードがシンプルかつ読みやすくなります。

7. 複数スレッドをラムダ式で実行する例

7. 複数スレッドをラムダ式で実行する例
7. 複数スレッドをラムダ式で実行する例

複数のスレッドをラムダ式で同時に実行するには、Executors.newFixedThreadPool()を使うと便利です。


ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 0; i < 3; i++) {
    int taskId = i;
    executor.submit(() -> {
        System.out.println("タスク" + taskId + "を実行中...");
    });
}
executor.shutdown();

このように、複数のスレッドを並列に実行する処理も、ラムダ式で簡単に書くことができます。

8. Javaの並列処理はラムダ式とともに進化した

8. Javaの並列処理はラムダ式とともに進化した
8. Javaの並列処理はラムダ式とともに進化した

昔のJavaではスレッド処理を書くのが面倒で、クラスをたくさん定義する必要がありました。しかしJava8以降、ラムダ式によってコードが非常にシンプルになり、可読性も向上しました。

RunnableCallableをラムダで使うことで、複雑な並列処理も短く書けて、メンテナンスしやすいコードになります。

これからJavaのスレッド処理を学ぶ方は、ぜひラムダ式と一緒に覚えて、実務で使いこなせるようにしましょう。

まとめ

まとめ
まとめ

Javaのラムダ式を使ったスレッド処理の全体像を振り返る

この記事では、Javaにおけるスレッド処理をテーマに、ラムダ式を使ったRunnableとCallableの書き方や使い分けについて詳しく解説してきました。 Javaで並列処理や非同期処理を行う場面は、デスクトップアプリケーション、Webアプリケーション、サーバーサイド処理など、実務のあらゆる場所で登場します。 その中で、スレッド処理をいかに分かりやすく、安全に書くかは非常に重要なポイントです。 Java八以降で導入されたラムダ式は、このスレッド処理の記述を大きく進化させ、コード量を減らし、可読性を高めてくれました。

Runnableは、Javaにおける最も基本的なスレッド実行インターフェースで、戻り値を必要としないシンプルな非同期処理に向いています。 ラムダ式を使うことで、runメソッドを明示的に書かずに処理内容だけを記述でき、短く直感的なコードになります。 一方でCallableは、スレッド処理の結果を呼び出し元に返したい場合に使われ、Futureと組み合わせることで処理完了の待機や結果取得が可能になります。 この違いを理解することが、Javaのスレッド処理を正しく使いこなす第一歩です。

ExecutorServiceとラムダ式の重要性

Callableを実行する際に登場したExecutorServiceは、スレッドを直接生成するのではなく、スレッドプールとして管理する仕組みを提供します。 これにより、スレッドの使い回しが可能になり、パフォーマンスやリソース管理の面で大きなメリットがあります。 ラムダ式とExecutorServiceを組み合わせることで、複数スレッドの処理も非常に簡潔に書けるようになりました。 Javaで非同期処理や並列処理を行う場合、この組み合わせはほぼ必須の知識といえます。

また、RunnableとCallableはいずれも関数型インターフェースであるため、ラムダ式と相性が良いという点も重要です。 抽象メソッドが一つだけという特徴があるからこそ、処理内容をそのまま式として渡すことができます。 この考え方に慣れることで、Javaのコード全体がよりモダンで読みやすい構造になっていきます。

ラムダ式を使ったスレッド処理の整理例

ここで、RunnableとCallable、ExecutorServiceを組み合わせた基本的なスレッド処理のイメージを、改めて整理してみましょう。 実務でよく使われる構成を意識したサンプルです。


ExecutorService executor = Executors.newSingleThreadExecutor();

executor.submit(() -> {
    System.out.println("ラムダ式でRunnable処理を実行中");
});

Future<String> future = executor.submit(() -> {
    return "Callableの戻り値です";
});

String result = future.get();
System.out.println(result);

executor.shutdown();

このように、Javaのラムダ式を活用することで、スレッド処理の流れが非常に分かりやすくなります。 複雑に見えがちな並列処理も、基本構造を理解すれば、恐れる必要はありません。 重要なのは、RunnableとCallableの役割の違いを理解し、適切な場面で使い分けることです。

先生と生徒の振り返り会話

生徒

「Javaのスレッド処理って難しい印象がありましたが、ラムダ式を使うとかなり読みやすくなりますね。 RunnableとCallableの違いも、やっと整理できました。」

先生

「それは良い理解ですね。 戻り値が必要かどうかでRunnableとCallableを使い分ける、という考え方が大切です。」

生徒

「ExecutorServiceを使う理由も分かりました。 スレッドを直接作るより、安全で管理しやすいんですね。」

先生

「その通りです。 実務では、スレッドプールとラムダ式を組み合わせた書き方が主流になっています。」

生徒

「これからは、非同期処理を書くときにラムダ式を積極的に使ってみます。」

先生

「ぜひそうしてください。 Javaの並列処理は、ラムダ式を理解することで一気に扱いやすくなりますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

JavaのRunnableとは何ですか?

Runnableは、Javaにおけるスレッド処理の基本的なインターフェースで、runメソッドを実装して非同期処理を実行します。ラムダ式を使うと、簡潔にスレッド処理を記述できます。

Java Silver SE17(1Z0-825)の演習量を重視したい人には、 定番の問題集がこちらです。

徹底攻略 Java SE 17 Silver 問題集をAmazonで見る

※ Amazonアソシエイト・プログラムを利用しています

カテゴリの一覧へ
新着記事
PR

JavaやLinuxの検証環境に
低コストで使えるVPS

Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理
Thymeleafのth:selected属性の使い方を完全解説!初心者でもわかるセレクトボックス選択状態の指定方法
Spring MVCのルーティング設計をマスター!初心者向け@GetMappingと@PostMappingの基本と命名ルール
JSPのコメントタグとHTMLコメントの違いを徹底解説!初心者向けわかりやすい使い分け講座
PR 未経験からITエンジニアを目指す方へ

Javaを学んでいるけど、「このまま未経験で就職できるか不安」という20代向け。 学歴不問・無料サポートの就職支援という選択肢があります。

Tamesy |無料で面談予約
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得
No.3
Java&Spring記事人気No3
JavaのIntegerクラスparseIntメソッド完全ガイド!初心者でもわかる文字列から数値変換
No.4
Java&Spring記事人気No4
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.6
Java&Spring記事人気No6
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
PR

ローカルPCに依存しない開発環境という選択肢

Java・Linuxの検証や学習環境を、クラウド上ですぐに用意できます。

Java入門

Javaの基礎を体系的に学びたい場合は、文法だけでなく 「なぜそう書くのか」まで丁寧に解説されているため、 初心者でも理解しやすい定番の1冊です。

スッキリわかるJava入門 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Java実践

ジェネリクス、enum、シールクラスなどの型設計から、 関数型プログラミング(ラムダ式・Stream API)、 JVM制御やリフレクション、外部ライブラリの活用までを扱っており、 「Javaを使えるレベル」へ進むための内容が網羅されています。

スッキリわかるJava入門 実践編 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Spring入門

Spring Frameworkの全体像から、 Webアプリ開発で必要となる主要機能までを 体系的に解説している定番の入門書です。

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発

※ 紙の書籍・電子書籍どちらでも購入できます

PR 実務経験のあるエンジニア向け

Javaなどの実務経験があり、次のキャリアを検討している方向け。 IT・ゲーム業界に特化した転職支援サービスという選択肢もあります。

転職ボックス |IT・ゲーム業界専門