1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaでThreadを実装して、無名クラス、ラムダを使ってみる

Posted at

Thread 処理を実行するには、Thread クラスのインスタンスを作ってあげて、そちらのstart メソッドを呼んであげます。
次に処理内容を書いていきたいのですが、Runnableというインターフェースを実装したクラスを書いてあげて「new Thread();」に対して渡してあげればOK

java
class MyRunnable implements Runnable {
	public void run(){
		for (int i=0; i < 500; i++){
			System.out.print('*');
		}
	}
}

public class Test {
	public static void main(String[] args) {
		MyRunnable r = new MyRunnable();

		Thread t = new Thread(r);
		t.start();

		for (int i=0; i < 500; i++){
			System.out.print('.');
		}
	}
}

ローカル変数だらけなので、省略してみる

java
class MyRunnable implements Runnable {
	public void run(){
		for (int i=0; i < 500; i++){
			System.out.print('*');
		}
	}
}

public class Test {
	public static void main(String[] args) {
		new Thread(new MyRunnable()).start();

		for (int i=0; i < 500; i++){
			System.out.print('.');
		}
	}
}

無名クラスを使って、2つを1つにまとめる。

java
public class Test {
	public static void main(String[] args) {
		new Thread(new Runnable() {
			public void run(){
				for (int i=0; i < 500; i++){
					System.out.print('*');
				}
			}
		}).start();

		for (int i=0; i < 500; i++){
			System.out.print('.');
		}
	}
}

抽象メソッドを一つだけ持つインターフェースのことを入力に対して出力が一つだけに定まるという意味で「関数型インターフェース」と呼びます。
Javaのバージョン8から関数型インターフェースはラムダ式という特殊な記法で置き換えることができるようになりました。

ラムダ式で置き換える

java
public class Test {
	public static void main(String[] args) {
		new Thread(() -> {
			for (int i=0; i < 500; i++){
				System.out.print('*');
			}
		}).start();

		for (int i=0; i < 500; i++){
			System.out.print('.');
		}
	}
}
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?