制作匿名线程的复制对象

时间:2013-04-21 15:28:00

标签: java multithreading clone

我是多线程的新手,

我目前正致力于将参数传递给线程。

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.
}
});

我想将此runnable对象用于具有不同obj值的不同线程, 那么可以使用相同的run方法制作深层副本吗?

提前致谢!

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

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

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

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

someMethod(getRunnableForSomePurpose());