第一种情况:假设您有很多任务都返回某种结果,现在我们称之为“结果”,这些都必须存储在数组列表中。有两种选择:
1)在main方法中创建一个arraylist,并使用可访问共享列表的runnables和一个同步的add方法
2)在main方法中创建一个arraylist,并使用callable执行任务并返回结果,让main方法将Result添加到它的列表中。
两者之间是否存在任何性能差异,因为可运行对象需要同步访问,但可调用对象不需要?
然后,对于第二种情况:现在假设每个任务生成一个“小”数组列表,假设每个任务少于 10 个项目。这再次提供了两个选项:
1) main 和 runnables 中的一个 arraylist 可以访问共享列表,该列表在生成时添加结果项。
2) main 和 callables> 中有一个 arrayList,每个都有自己的本地 arraylist,用于存储结果,直到任务完成,然后在 main 中使用 addAll 来添加找到的结果。
和以前一样的问题,性能差异是什么?
为了清楚起见,速度(一些同步问题等)和内存方面的性能(由于本地小数组列表,可调用对象是否使用更多内存,或者这个小到可以忽略不计)?