cpu 通过高速缓冲区,去获取内存中的值,并缓存下来;
volatile
1、这个关键字的其中一个重要作用就是解决可见性问题,即保证当一个线程修改了某个变量之后,该变量对于另外一个线程是立即可见的。
2、volatile关键字还有另外一个重要的作用,就是禁止指令重排序。
在下载时,让isCanceled为volatile:
public class DownloadTask {
volatile boolean isCanceled = false;
public void download() {
new Thread(new Runnable() {
@Override
public void run() {
while (!isCanceled) {
byte[] bytes = readBytesFromNetwork();
if (bytes.length == 0) {
break;
}
writeBytesToDisk(bytes);
}
}
}).start();
}
public void cancel() {
isCanceled = true;
}
}