0

私はマルチスレッドが初めてです。

現在、パラメーターをスレッドに渡す作業を行っています。

public class MyRunnable<T> implements Runnable{

protected T obj;

public MyRunnable(){
    obj= null;
}
@Override
public void run(){
    //do something
}

public void setObj(T obj){
    this.obj=obj;
}

public T getObj(){
    return obj;
}

}

そして、指定したタスクで MyRunnable obj を初期化しようとしています

public void run 内で、このように。

someMethod(new MyRunnable<someType>(){
public void run(){
    // do some jobs 1.
        // do some jobs 2.
}
});

この runnable オブジェクトを異なる obj 値を持つ別のスレッドに使用したいのですが、同じ run メソッドでディープ コピーを作成することは可能ですか?

前もって感謝します!

編集: 元の MyRunnable().run() は何もせず、タスクは匿名ブロック内に実装されています。同じ実装された run() メソッドでコピーを作成するための回避策はありますか?

4

2 に答える 2

0

コピーコンストラクタを作成できます

public MyRunnable(MyRunnable myRunnable) {
    this.fieldA = myRunnable.fieldA;
    this.felddB = myRunnable.fieldB;
    // etc
}

別のオブジェクトを使用することになるため (他のフィールドはすべて同じ)、これを反映するようにコンストラクターを変更します。

public MyRunnable(T obj, MyRunnable myRunnable) {
    this.obj = obj;
    this.fieldA = myRunnable.fieldA;
    this.felddB = myRUnnable.fieldB;
    // etc
}
于 2013-04-21T15:34:45.427 に答える