Java同時プログラミングでスレッドを作成するにはどうすればいいですか?
概要
スレッドは基本的なスケジュール単位であり、プロセスに含まれる実際の動作単位であり、それ自体は独立して存在しない。プロセスには少なくともスレッドがあり、プロセス中の複数のスレッドがプロセスのリソースを共有しています。
Javaでスレッドを作成する方法は、Thread類を継承し、Runnableインターフェースを実現する、Callableインターフェースを実現する、スレッドプールを使用する方法など様々です。スレッド池は、後の文章で単独で紹介します。ここでは、他の3つの方法を紹介します。
Thread類を継承する
利点:run法では現在のスレッドをthisで取得できます。
短所:Javaは多くの継承をサポートしていませんので、Thread類を継承したら他のクラスを継承できません。
利点:Runnableインターフェースを実現した後、他のクラスの継承に影響を与えず、複数のスレッドリソースの共有に有利である。
短所:現在のスレッドを取得するには、Thread.current Thread()を呼び出す必要があります。
利点と短所は、Runnableインターフェースを実現することと類似しているが、Callableインターフェースを実現することは、リターン値を有することができる。
スレッドは基本的なスケジュール単位であり、プロセスに含まれる実際の動作単位であり、それ自体は独立して存在しない。プロセスには少なくともスレッドがあり、プロセス中の複数のスレッドがプロセスのリソースを共有しています。
Javaでスレッドを作成する方法は、Thread類を継承し、Runnableインターフェースを実現する、Callableインターフェースを実現する、スレッドプールを使用する方法など様々です。スレッド池は、後の文章で単独で紹介します。ここでは、他の3つの方法を紹介します。
Thread類を継承する
利点:run法では現在のスレッドをthisで取得できます。
短所:Javaは多くの継承をサポートしていませんので、Thread類を継承したら他のクラスを継承できません。
public class MyThread extends Thread {
/**
*
*/
@Override
public void run() {
System.out.println("do something...");
}
public static void main(String[] args) {
//
MyThread myThread = new MyThread();
//
myThread.start();
}
}
Runnableインターフェースを実現利点:Runnableインターフェースを実現した後、他のクラスの継承に影響を与えず、複数のスレッドリソースの共有に有利である。
短所:現在のスレッドを取得するには、Thread.current Thread()を呼び出す必要があります。
public class MyThread implements Runnable {
/**
*
*/
@Override
public void run() {
System.out.println("do something...");
}
public static void main(String[] args) {
// ,
Thread thread1 = new Thread(new MyThread());
Thread thread2 = new Thread(new MyThread());
//
thread1.start();
thread2.start();
}
}
Callableインターフェースを実現利点と短所は、Runnableインターフェースを実現することと類似しているが、Callableインターフェースを実現することは、リターン値を有することができる。
public class MyThread implements Callable<String> {
/**
* ,
*/
@Override
public String call() throws Exception {
System.out.println("do something...");
Thread.sleep(3000);
return " ";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
//
FutureTask<String> futureTask = new FutureTask(new MyThread());
//
new Thread(futureTask).start();
//
String result = futureTask.get();
System.out.println(result);
}
}
以上はJavaの同時プログラミングの中でどのようにスレッドを作成するかの詳細です。Javaのスレッド作成に関する資料は他の関連記事に注目してください。