Threadに引数を渡す方法 | Java

JavaにおいてThreadに引数を渡す方法を紹介します。
スポンサーリンク


Threadに引数を渡す方法

結論から言うと標準のThreadクラスのオブジェクトに引数を渡すことはできません。

よって、以下の方法を使用する必要があります。
  • グローバル変数を使用する
  • Threadを継承したクラスのメンバ変数を使用する

グローバル変数を使用する

グローバル変数をThreadに渡す引数の代わりとして使用することができます。

サンプルコードは以下です。
public int param;

public static void main(String args[]) {
    Thread thread = new Thread(() -> {
        //paramの値を使用する
    });
    param = 10;
    thread.start();
}
この方法はコーディングは楽ですが、デメリットとしては作成するThreadオブジェクトの数だけグローバル変数が必要となります。

Threadを複数個作成したい場合は次に紹介するThread継承クラスの方法を使用すると良いでしょう。

Threadを継承したクラスのメンバ変数を使用する

Threadを継承したクラスを作成し、そのメンバ変数を使用することでThreadに引数を渡すことができます。

サンプルコードは以下です。
public class MyThread extends Thread {
    private int param;

    public MyThread(int _param) {
        param = _param;
    }

    @Override
    public void run() {
        //paramを使用する
    }
}

public static void main(String args[]) {
    MyThread thread = new MyThread(10);
    threas.start();
}
この方法のメリットはThreadを複数個作成しても作成したクラスを使い回すことができることです。

使用例: Threadにコールバック関数を渡す

ネットワークからファイルをダウンロードして、ダウンロード完了後にそのダウンロードしたデータを使用して処理をさせたいときがあります。

この場合には上記で紹介した継承クラスのメンバ変数の型をConsumerなどにしてコールバック関数を渡してあげればOKです。

サンプルコードは以下です。
public class MyThread extends Thread {
    private byte[] data;
    private Consumer<byte[]> consumer;

    public MyThread(Consumer<byte[]> _consumer) {
        consumer = _consumer;
    }

    @Override
    public void run() {
        data = download(); //データをダウンロードする何かしらの関数
        consumer.accept(data); //コールバック関数を呼び出す
    }
}

まとめ

JavaにおいてThreadに引数を渡す方法を紹介しました。

データのダウンロードなどGUIの裏で処理をさせて完了したときにコールバック動作させたいときなどに参考になると思います。
スポンサーリンク

この記事が有用でしたら、↓にあるSNSボタン…
この記事が有用でしたら、↓にあるSNSボタンからご友人にご共有いただけますと幸いです!
Java
ASP 一般プログラミング

プログラミングスキルを習得して業務/転職/副業に活かしたい方へ
これからの時代は終身雇用が崩壊し、自分のスキルで食べていく時代が到来します。 そのような時代の中で、プログラミングのスキルは単純なプログラム開発業務だけではなく、データ解析などあらゆる業務で普遍的に使用できる非常に有益なスキルと考えられます。 目先の業務や将来の転職に備えて、プログラミングのスキルを習得するのはいかがでしょうか?

プログラミングを生かした副業も非常にオススメです。 転売などの手を止めると稼ぎがなくなってしまう副業と違い、 アプリやサイト運営などプログラミングを使用した副業の一部は一度公開してしまえばその後は放置しても継続してお金を稼ぐことができるという非常に良い特性があります。

一方で業務/転職/副業で活かせるレベルまでプログラミングを習得しようとすると、質問ができない独学では限界があり、挫折してしまうことが多いでしょう。

そんなときは下記のような質問しながら学習を進められるオンライン上のプログラミングスクールがオススメです!

無料体験や無料カウンセリングなどもありますので、まずは確認だけでもしてみてはいかがでしょうか?

Tech Academy
Aresei-note