我试图设计一个使用由Executors.newSingleThreadExecutor()做了一个工作线程的Android应用线程本地高速缓存的内存在被销毁时刷新到主内存???
但是我只想说工作者线程来处理,同时节省一些信息属于由主线程发送的连续任务工作者线程。 (然而,问题是,我发现当newSingleThreadExecutor闲置长期主线程不需要知道,就在工作线程应该保持信息的内部。
// State saver class , once made by main thread only accessed by worker thread
public class StateSaver{
public int count;
}
// Runnable obj that will be sent to worker thread from main thread
public class rnbl implements Runnable{
final public StateSaver sv;
public rnbl(StateSaver sv){
this.sv = sv;
}
@Override
public void run(){
sv.count++;
}
}
// Main Thread
ExecutorService ex = Executors.newSingleThreadExecutor();
StateSaver sv = new StateSaver();
public void functionCalledByMainThread(){
ex.submit(new rnbl(sv));
}
,它可能只是破坏通过它线程制作并在需要时用新的替换它
所以我很担心的是,如果像下面的情况发生什么?
工作者线程中更新的状态变量
变量是在线程缓存内存更新,但不会应用到主存储器,但(变量不应是挥发性的)
工作者线程被破坏
更新从未应用于主内存...
然后,如果执行程序创建一个新的线程继续与任务,保存的状态可能是不正确的权利?当然,使用volatile会很容易,但我不需要使用volatile。或者它保证当一个线程被销毁时,它对变量所做的所有更改都会刷新到主内存中?
为什么你需要不使用volatile? –
其实我只是有点好奇...也许我应该至少使用一个易变的变量来缓存下来的主要内存 –