Executor的Runnable中的变量

时间:2012-01-05 19:37:50

标签: android executor

假设我有一个执行简单文件写入操作的Runnable,并且使用执行程序调用此Runnable。

执行程序是一个单线程Executor类..

public void doThis() {
    executor.execute(new Runnable() {
        @Override
        public void run() {
            file.write(_data);
        }
    });
}

在调用execute()的那一刻,_data的直接内容会被保存吗?这意味着一旦runnable被提交到队列,我可以继续对_data进行更改,并且更改不会写入文件?

_data = something
doThis();
_data = something else

我有可能最终做file.write(其他的东西)吗?

1 个答案:

答案 0 :(得分:1)

对你的第一个和第二个问题没有问题,对你的第三个问题是肯定的......如果执行程序运行的单个线程是与调用线程不同的线程,那么这不是一个线程安全的操作。除非.execute()在与调用者完全相同的线程上执行,否则在.write完成之前,您需要避免对_data进行更改。

解决这个问题的常用方法是在将_data传递给执行者之前简单地制作一份_data。