Java はマルチスレッドです。マルチスレッドを使用するには、Thread クラスの継承、Runnable インターフェイスの実装、Callable と Future を使用したスレッドの作成の 3 つの方法があります。
Thread クラスの継承 (推奨学習: Java コース )
実装方法は非常に簡単で、Threadクラスを継承するクラスを作成し、runメソッドを書き換えるだけで、mainメソッド内でクラスインスタンスオブジェクトのstartメソッドを呼び出すことでマルチスレッド同時実行を実現します。コード:public class MyThread extends Thread { @Override public void run(){ super.run(); System.out.println("执行子线程..."); } }
テスト ケース:
public class Test { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); System.out.println("主线程..."); } }
実行結果:
Runnable インターフェイスの実装
このメソッドの実装も非常に簡単で、継承された Thread クラスを変更して Runnable インターフェイスを実装するだけです。コードは次のとおりです。public class MyRunnable implements Runnable { @Override public void run() { System.out.println("执行子线程..."); } }
テスト ケース:
public class Test { public static void main(String[] args) { Runnable runnable = new MyRunnable(); Thread thread = new Thread(runnable); thread.start(); System.out.println("主线程运行结束!"); } }
実行結果:
Callable と Future を使用してスレッドを作成する
上記の 2 つのメソッドには次の 2 つの問題があります:
子スレッドの戻り値を取得できませんrun メソッドは例外をスローできません#これら 2 つの問題を解決するには、Callable インターフェイスを使用する必要があります。インターフェースに関して言えば、上記の Runnable インターフェース実装クラスのインスタンスが Thread クラスのコンストラクターのパラメーターとして渡され、Thread の起動を通じて run メソッドの内容が実行されます。ただし、Callable は Runnable のサブインターフェイスではなく、まったく新しいインターフェイスであり、そのインスタンスを Thread 構造に直接渡すことはできないため、変換するには別のインターフェイスが必要です。
実際には変換処理が 1 つ多く、最終的に Thread の開始によって新しいスレッドが作成されます。この考え方により、コードは理解しやすくなります。import java.util.concurrent.Callable;
public class MyCallable implements Callable {
int i = 0;
@Override
public Object call() throws Exception {
System.out.println(Thread.currentThread().getName()+" i的值:"+ i);
return i++; //call方法可以有返回值
}
}
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Test {
public static void main(String[] args) {
Callable callable = new MyCallable();
for (int i = 0; i < 10; i++) {
FutureTask task = new FutureTask(callable);
new Thread(task,"子线程"+ i).start();
try {
//获取子线程的返回值
System.out.println("子线程返回值:"+task.get() + "\n");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
以上がJavaはマルチスレッドですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。