ホームページ  >  記事  >  Java  >  Javaマルチスレッドを実装する方法

Javaマルチスレッドを実装する方法

尚
オリジナル
2019-12-04 11:06:593693ブラウズ

Javaマルチスレッドを実装する方法

Java でマルチスレッドを実装する方法: (推奨: java ビデオ チュートリアル)

方法 1: Thread クラスを継承する

1. Thread クラスを継承するサブクラスを作成します

2. Thread クラスの run() を書き換えます: run() でこのスレッドによって実行される操作を宣言します

3. Thread のサブクラスのオブジェクトを作成します

4. このオブジェクトの start() を呼び出します: ① スレッドを開始します ② 現在のスレッドの run() メソッドを呼び出します

方法 2: Runnable インターフェイスの実装方法

1. Runnable インターフェイスを実装するクラスを作成します

2. Runnable インターフェイスに抽象メソッドを実装します: run(): will create スレッドによって実行される操作はこのメソッドで宣言されます

3. Runnable インターフェイス実装クラスのオブジェクトを作成します

4. このオブジェクトをThread クラスのコンストラクターにパラメータを指定して、Thread クラス Object

5 を作成します。Thread クラスで start() を呼び出します: ① スレッドを開始します。 ② スレッドの run() を呼び出します --->Call Runnable インターフェース実装クラスの run()

#次の 2 つのメソッドが jdk1.5 で追加されました。

方法 3: Callable インターフェイスを実装する

手順:

1. Runnable を使用する場合と比較して、Callable はより強力です

2. run() メソッドと比較して、実装された call() メソッドは値を返すことができます

#3. このメソッドは例外をスローすることができます

#4. 汎用の戻り値をサポート

# 5. 返された結果の取得など、FutureTask クラスを使用する必要があります

Future インターフェイスは、特定の Runnable タスクおよび Callable タスクの実行結果のキャンセル、完了したかどうかのクエリ、結果の取得などを行うことができます。 FutureTask は、Future インターフェイスの唯一の実装クラスであり、Runnable インターフェイスと Future インターフェイスも実装します。 Runnable としてスレッドによって実行でき、Callable の戻り値を取得する Future としても使用できます。

方法 4: スレッド プールを使用します

手順:

事前に複数のスレッドを作成し、スレッド プールに入れ、使用するときに直接取得し、使用後はプールに戻します。頻繁な作成と破壊を回避し、再利用を実現します。生活における公共交通機関と同じです。

利点:

1. 応答速度の向上 (新しいスレッドの作成時間の短縮)

#2. リソース消費の削減 (スレッド プール内のスレッドを再利用するため、スレッドを再利用する必要がありません)毎回作成)

3. スレッド管理を容易にする

例:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ThreadPoolExecutor;

//方式一
class ThreadTest extends Thread {
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}
}

// 方式二
class RunnableTest implements Runnable {
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}
}

// 方式三
class CallableTest implements Callable<Integer> {

	@Override
	public Integer call() throws Exception {
		int sum = 0;
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
			sum += i;
		}
		return sum;
	}

}

// 方式四
class ThreadPool implements Runnable {

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName() + ":" + i);
		}
	}

}

public class Test {
	public static void main(String[] args) {
		// 继承Thread
		ThreadTest thread = new ThreadTest();
		thread.setName("方式一");
		thread.start();

		// 实现Runnable
		RunnableTest runnableTest = new RunnableTest();
		Thread thread2 = new Thread(runnableTest, "方式二");
		thread2.start();

		// 实现Callable<> 有返回值
		CallableTest callableTest = new CallableTest();
		FutureTask<Integer> futureTask = new FutureTask<>(callableTest);
		new Thread(futureTask, "方式三").start();
		// 返回值
		try {
			Integer integer = futureTask.get();
			System.out.println("返回值(sum):" + integer);
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 线程池
		ExecutorService pool = Executors.newFixedThreadPool(10);

		ThreadPoolExecutor executor = (ThreadPoolExecutor) pool;
		/*
		 * 可以做一些操作:
		 * corePoolSize:核心池的大小 
		 * maximumPoolSize:最大线程数
		 * keepAliveTime:线程没任务时最多保持多长时间后会终止
		 */
		executor.setCorePoolSize(5);

		// 开启线程
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());

	}

}

Java の詳細については、

Java 基本チュートリアル

列に注目してください。 。

以上がJavaマルチスレッドを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。