首先,这是一个鼓舞人心的例子:
public class Algorithm
{
public static void compute(Data data)
{
List<Task> tasks = new LinkedList<Task>();
Client client = new Client();
int totalTasks = 10;
for(int i = 0; i < totalTasks; i++)
tasks.add(new Task(data));
client.submit(tasks);
}
}
// AbstractTask implements Serializable
public class Task extends AbstractTask
{
private final Data data;
public Task(Data data)
{
this.data = data;
}
public void run()
{
// Do some stuff with the data.
}
}
所以,我正在做一些并行编程,并且有一种方法可以创建大量任务。这些任务共享他们将要操作的数据,但是我在为每个任务提供对数据的引用时遇到了问题。问题是,当任务被序列化时,会为每个任务制作一份数据副本。现在,在这个任务类中,我可以对数据进行静态引用,以便它只存储一次,但是在任务类的上下文中这样做并没有多大意义。我的想法是将对象作为静态存储在另一个外部类中,并让任务从类中请求对象。这可以在发送任务之前完成,很可能在上面发布的示例中的计算方法中完成。你觉得这样合适吗?任何人都可以就建议的想法提供任何替代解决方案或提示吗?谢谢!