ホームページ Java &#&ベース Javaでスレッドを作成する3つの方法は何ですか?

Javaでスレッドを作成する3つの方法は何ですか?

Nov 23, 2020 pm 04:51 PM
java スレッドを作成する

Java でスレッドを作成する 3 つの方法は次のとおりです: 1. Thread クラスを継承してスレッドを作成する; 2. Runnable インターフェイスを実装してスレッドを作成する; 3. Callable と Future を使用してスレッドを作成する。

Javaでスレッドを作成する3つの方法は何ですか?

Java は Thread クラスを使用してスレッドを表し、すべてのスレッド オブジェクトは Thread クラスまたはそのサブクラスのインスタンスである必要があります。 Java は、次の 3 つの方法でスレッドを作成できます。

1) Thread クラスを継承してスレッドを作成する

2) Runnable インターフェイスを実装するスレッドの作成

3) Callable と Future を使用してスレッドを作成します

スレッドを作成するこれら 3 つの方法をそれぞれ見てみましょう。

------------------------Thread クラスを継承してスレッドを作成します--- --- ---------------

Thread クラスを継承してマルチスレッドを作成および開始する一般的な手順は次のとおりです。 follow

1]D Thread クラスのサブクラスを定義し、クラスの run() メソッドをオーバーライドします。このメソッドのメソッド本体はタスクです。 run() メソッドはスレッド実行本体とも呼ばれます。

#2] Thread サブクラスのインスタンスを作成します。つまり、スレッド オブジェクトを作成します。

#3] スレッドを開始します。つまり、スレッド オブジェクトを作成します。 、スレッドの start()Method

コード例

public class MyThread extends Thread{//继承Thread类
  public void run(){
  //重写run方法
  }
}
public class Main {
  public static void main(String[] args){
    new MyThread().start();//创建并启动线程
  }
}
ログイン後にコピー

-----------を呼び出します。 ------ ------Runnable インターフェイスを実装してスレッドを作成する---------------------

Runnable を実装する インターフェイスを介してスレッドを作成および開始する一般的な手順は次のとおりです。

#1] Runnable インターフェイスの実装クラスを定義し、オーバーライドすることもできます。 run() メソッド。この run() メソッドは Thread の run() と同じです。) メソッドはスレッドの実行本体でもあります

#2] インスタンスを作成しますRunnable 実装クラスのインスタンスを作成し、このインスタンスを Thread のターゲットとして使用して Thread オブジェクトを作成します。この Thread オブジェクトは実際のスレッド オブジェクトです。

3]3 番目の部分はまだ開始します。スレッド オブジェクトの start() メソッドを呼び出してスレッドを実行します。

コード例:

public class MyThread2 implements Runnable {//实现Runnable接口
  public void run(){
  //重写run方法
  }
}
public class Main {
  public static void main(String[] args){
    //创建并启动线程
    MyThread2 myThread=new MyThread2();
    Thread thread=new Thread(myThread);
    thread().start();
    //或者    new Thread(new MyThread2()).start();
  }
}
ログイン後にコピー

------------- -----------Callable と Future を使用してスレッドを作成します--------------- -------

は Runnable インターフェイスとは異なります。Callable インターフェイスは、スレッドの実行本体として call() メソッドを提供します。call() メソッドは run() メソッドです。 # 強力でなければなりません。

#>>call() メソッドは戻り値を持つことができます>>call() メソッドは次のことを宣言できます。例外をスローします

Java5 は、Callable インターフェースの call() メソッドの戻り値を表す Future インターフェースを提供し、Future インターフェースの実装クラス FutureTask を提供します。この実装クラスは、Future を実装するだけではありません。インターフェイスですが、Runnable インターフェイスも実装しているため、Thread クラスのターゲットとして使用できます。 Future インターフェイスには、関連する呼び出し可能なタスクを制御するために、いくつかのパブリック メソッドが定義されています。

>boolean cancel(boolean MayInterruptIfRunning): ビューは、Future に関連付けられた Callable タスクをキャンセルします。

>V get(): Callable の call() メソッドの戻り値を返します。このメソッドを呼び出すとプログラムがブロックされ、サブスレッドが終了するまで戻り値は取得されません。

>V get(long timeout, TimeUnit単位): の戻り値を返します。 Callable の call() メソッド。タイムアウト時間までブロックされ、指定された時間の後にリターンはスローされません。 TimeoutException

>boolean isDone(): Callable タスクが完了した場合、True

を返します。

>boolean isCancelled(): Callable タスクが正常に完了する前にキャンセルされた場合、Cancel, return True

関連する概念を紹介した後、戻り値を持つスレッドを作成して開始する手順は次のとおりです。次のように:

1] Callable インターフェイスの実装クラスを作成し、 call () メソッドを実装してから、実装クラスのインスタンスを作成します (Java8 以降では、ラムダ式を直接使用してCallable オブジェクトを作成します)。

#2] FutureTask クラスを使用して Callable オブジェクトをラップします。FutureTask オブジェクトは、Callable オブジェクトの call() メソッドの戻り値をカプセル化します。

#3 ]FutureTask オブジェクトを Thread オブジェクトのターゲットとして使用して、スレッドを作成して開始します (FutureTask は Runnable インターフェイスを実装しているため)

#4] get( ) FutureTask オブジェクトのメソッドを呼び出して、サブスレッド実行後の結果を取得します。戻り値

コード例:

public class Main {
  public static void main(String[] args){
   MyThread3 th=new MyThread3();
   //使用Lambda表达式创建Callable对象
     //使用FutureTask类来包装Callable对象
   FutureTask<Integer> future=new FutureTask<Integer>(
    (Callable<Integer>)()->{
      return 5;
    }
    );
   new Thread(task,"有返回值的线程").start();//实质上还是以Callable对象来创建并启动线程
    try{
    System.out.println("子线程的返回值:"+future.get());//get()方法会阻塞,直到子线程执行结束才返回
    }catch(Exception e){
    ex.printStackTrace();
   }
  }
}
ログイン後にコピー

------ ---------- ------------------------3つのスレッド作成方法の比較------------- ---------- -------

Runnable インターフェイスと Callable インターフェイスの実装方法は基本的に同じですただし、後者はcall()メソッドの実行時に戻り値があり、後者はスレッド実行本体のrun()メソッドの戻り値に戻り値がないため、これら2つのメソッドは1つに分類できます。メソッドと Thread クラスを継承するメソッドは次のとおりです。

1、執行緒只是實作Runnable或實作Callable接口,還可以繼承其他類別。

2、這種方式下,多個執行緒可以共享一個target對象,非常適合多執行緒處理同一份資源的情況。

3、但是程式設計稍微複雜,如果需要存取當前線程,必須呼叫Thread.currentThread()方法。

4、繼承Thread類別的執行緒類別不能再繼承其他父類別(Java單繼承決定)。

註:一般推薦採用實作介面的方式來建立多執行緒

更多程式相關知識,請造訪:程式設計影片課程! !

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

See all articles