ですから、最近、学校でJavaスレッドについて学んでいるのではないかと思っています。
他のほとんどの言語とは異なり、私はまだJavaで関数をスレッド化する方法を見つけていません。これは、本当に私が探しているものです...
runクラスを使用できることは知っていますが、クラスに3つの関数があり、それぞれに独自のパラメーターがあると想像してください。これらの関数を呼び出して、可能であれば個別にスレッド化できるようにしたいと思います...
ですから、最近、学校でJavaスレッドについて学んでいるのではないかと思っています。
他のほとんどの言語とは異なり、私はまだJavaで関数をスレッド化する方法を見つけていません。これは、本当に私が探しているものです...
runクラスを使用できることは知っていますが、クラスに3つの関数があり、それぞれに独自のパラメーターがあると想像してください。これらの関数を呼び出して、可能であれば個別にスレッド化できるようにしたいと思います...
new Thread(new Runnable() {
public void run()
{
functionToThread();
}
}).start();
Java でマルチスレッドを実現するための正しいアプローチは、 を実装することRunnable
です。クラスを拡張するのThread
は便利な少し簡単な方法ですが、Runnable
インターフェイスを実装するのが最善です。これによりrun()
、関数を呼び出すことができるメソッドが提供され、 の代わりに他のクラスを拡張できるようになるためですThread
。
ただし、アクセスできないのは、他のスレッドで実行している関数の戻り値です。Future
これには、他のスレッドが関数を実行するとすぐに、戻り値が入力されるオブジェクトを提供する を使用できます。を実装する代わりに、非常によく似た を実装し、そのメソッドを の代わりに呼び出すRunnable
ことで、ジェネリックを介して戻り値の型を指定できるようにします。オブジェクトは、スレッド プールおよびタスク エグゼキュータでも使用できます。クラスの javadoc の例を見てください。良い例と説明があります。Callable
call()
run()
Future
Future
また、メソッド内で匿名クラスを作成できることも覚えておいてください。そのため、単純に後で実行する場合は、別のスレッドで実行するメソッド内でインライン (Runnable
または拡張) するだけです。Callable
(クランチャーが彼の答えで示したように)
Runnable
スレッドを実装または拡張し、関数を呼び出す個別のラッパー クラスを作成する必要があります。
ところで、Java に C のような種類のメソッド ポインターがあったとしても、関数に渡したいパラメーターの値を知っているラッパーが必要です。