「スレッド間で物を渡す」方法については、Javaのスレッドの最も重要な部分は、を実装するクラスのインスタンスであるターゲットjava.lang.Runnable
であることに注意してください。Thread
インスタンスを渡さずにオブジェクトを作成するRunnable
場合、ターゲットはThread
オブジェクト自体です(がjava.lang.Thread
実装されているためjava.lang.Runnable
)。それ以外の場合は、を実装するカスタムクラスを作成し、Runnable
このクラスのインスタンスを作成して、新しく作成したインスタンスに渡す可能性がありThread
ます。この場合、カスタムクラスのインスタンスがターゲットになります。
スレッド(基本的にはRunnable
オブジェクト)がオブジェクトにアクセスできるようにすることは、Runnable
オブジェクトがインスタンス変数としてオブジェクトへの参照を持っていることを確認しrun
、スレッドで実行されているメソッドにオブジェクトをアクセスできるようにすることと同じです。
double
配列のコピーを新しく作成されたスレッドに渡す方法の例を次に示します。
class MyRunner implements Runnable
{
double[] m_data;
public MyRunner(double[] data)
{
this.m_data = data;
}
public void run()
{
// this code is executed in a thread. It can access `m_data`.
}
}
public class Callback
{
public void doCallback(double[] data)
{
double[] dataCopy = null;
if (data != null) {
dataCopy = new double[data.length];
System.arraycopy(data, 0, dataCopy, 0, data.length);
}
MyRunner target = new MyRunner(dataCopy);
Thread worker = new Thread(target);
worker.start();
}
}