1

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

executor 是一个单线程的 Executor 类。

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

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

_data = something
doThis();
_data = something else

有没有机会我最终会做 file.write(别的)?

4

1 回答 1

1

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

解决此问题的一种常见方法是在将 _data 传递给执行程序之前简单地制作一份副本。

于 2012-01-05T20:07:57.417 回答