Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 执行器内部的变量';它可以运行_Android_Executor - Fatal编程技术网

Android 执行器内部的变量';它可以运行

Android 执行器内部的变量';它可以运行,android,executor,Android,Executor,假设我有一个执行简单文件写入操作的Runnable,这个Runnable由一个执行器调用 executor是单线程执行器类 public void doThis() { executor.execute(new Runnable() { @Override public void run() { file.write(_data); } }); } 调用execute()时,\ u数据的即时内容是否得到保存

假设我有一个执行简单文件写入操作的Runnable,这个Runnable由一个执行器调用

executor是单线程执行器类

public void doThis() {
    executor.execute(new Runnable() {
        @Override
        public void run() {
            file.write(_data);
        }
    });
}
调用execute()时,\ u数据的即时内容是否得到保存?这意味着一旦runnable被提交到队列中,我就可以继续对_数据进行更改,而更改不会写入文件

_data = something
doThis();
_data = something else

有没有可能我最终会去做file.write(其他东西)?

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


解决这个问题的一种常见方法是,在将数据传递给执行人之前,只需复制一份数据。

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


解决此问题的一种常见方法是,在将数据传递给执行者之前,只需复制一份数据。

问题在于,我将对数据进行许多更改,并希望立即对新数据调用execute()。在这种情况下,我想我唯一的选择是实现某种类型的数据结构_data,这样execute()将始终与_data[]一起工作。最旧的?发布了一个类似的问题(),其中他们讨论了内存一致性以及“内存一致性影响:在将可运行对象提交给执行器之前,线程中的操作发生在其执行开始之前,可能发生在另一个线程中。”我希望通过相同的逻辑,_data=something不会发生在doThis()之前。但是,我不太确定“线程中的操作”之前发生了什么“我的意思是。还有可能吗?问题是我会对_数据进行很多更改,并希望立即对新的_数据调用execute()。在这种情况下,我想我唯一的选择是实现某种类型的数据结构_data,这样execute()将始终与_data[]一起工作。最旧的?发布了一个类似的问题(),其中他们讨论了内存一致性以及“内存一致性影响:在将可运行对象提交给执行器之前,线程中的操作发生在其执行开始之前,可能发生在另一个线程中。”我希望通过相同的逻辑,_data=something不会发生在doThis()之前。但是,我不太确定“线程中的操作”之前发生了什么“我的意思是。还有可能吗?