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

公众虚空之内奔跑,就是这样。

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

我想将此可运行对象用于具有不同 obj 值的不同线程,那么是否可以使用相同的运行方法进行深层复制?

提前致谢!

编辑:原来的 MyRunnable().run() 什么都不做,并且任务是在匿名块中实现的,是否可以使用相同的实现 run() 方法制作副本?

4

2 回答 2

0

您可以创建一个返回特定类型的 MyRunnable 的方法:

public MyRunnable<SomeType> getRunnableForSomePurpose(){
    return new MyRunnable<SomeType>(){
        public void run(){
            //do some jobs
        }
    }
}

然后在每次需要具有特定运行方法的 MyRunnable 时调用该方法:

someMethod(getRunnableForSomePurpose());
于 2013-04-21T15:54:14.983 回答
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 回答