题目
在使用TaskPool时,开发人员需要提交一个任务,该任务需要使用ArrayBuffer作为不为空的参数,并且需要多次调用。为了确保ArrayBuffer在线程间传递时不会影响原有对象,开发人员应该怎么做?A. 使用setCloneList()设置ArrayBuffer的传输行为B. 使用@Concurrent装饰器标注任务函数C. 使用@Sendable装饰器标注任务函数
在使用TaskPool时,开发人员需要提交一个任务,该任务需要使用ArrayBuffer作为不为空的参数,并且需要多次调用。为了确保ArrayBuffer在线程间传递时不会影响原有对象,开发人员应该怎么做? A. 使用setCloneList()设置ArrayBuffer的传输行为 B. 使用@Concurrent装饰器标注任务函数 C. 使用@Sendable装饰器标注任务函数
题目解答
答案
A
解析
考查要点:本题主要考查在多线程任务处理中,如何确保共享对象在线程间传递时的独立性,避免数据竞争或意外修改。
解题核心思路:
当任务需要多次使用可变对象(如ArrayBuffer
)时,若不处理其传输行为,多个线程可能共享同一对象,导致原对象被意外修改。关键点在于确保每次传递的都是独立副本,而非直接操作原对象。
破题关键点:
ArrayBuffer
是可变对象,在线程间共享时需特别注意数据隔离。setCloneList()
的作用是设置对象在传输时自动克隆,从而保证原对象不被修改。@Concurrent
和@Sendable
装饰器分别用于标记函数的线程安全性和数据传输能力,但与克隆机制无关。
选项分析
选项A:使用setCloneList()
设置传输行为
正确性:
setCloneList()
用于配置对象在跨线程传递时的克隆策略。通过设置ArrayBuffer
的克隆行为,每次任务传递的都是原对象的独立副本,原对象保持不变。
适用场景:当需要多次调用任务且参数不可变时,克隆机制能有效隔离线程间的操作。
选项B:使用@Concurrent
装饰器
错误原因:
@Concurrent
用于标记函数为线程安全,允许其被多个线程同时调用。但本题的核心问题是对象的传输隔离,而非函数本身的线程安全性,因此此选项无关。
选项C:使用@Sendable
装饰器
错误原因:
@Sendable
通常用于标记对象可被安全传输,但未明确说明是否克隆。题目要求保证原对象不被修改,仅靠@Sendable
无法实现克隆逻辑。