我现在正在编写一个Java ME应用程序。据我所知,它使用旧的Java 内存模型,因为它的功能仅限于 Java 1.3。该模型提供的关于 volatile 关键字的唯一保证是所有读取和写入都直接通过主内存而不是缓存。
考虑以下代码:
class BillHelper {
volatile HttpConnection con;
volatile InputStream in;
// Called from thread A
BillResponse makeBill(BillRequest request) throws BillException {
// open http connection
// extract request data from method parameter
// prepare all needed headers
// flush headers
// open input stream, parse response
}
// Called from thread B
void cancelBillRequest() {
if (in != null) {
try {
in.close();
} catch (IOException ignored) {}
}
if (con != null) {
try {
con.close();
} catch (IOException ignored) {}
}
}
}
从不同的线程调用方法。方法makeBill()
写入volatile
变量,方法cancelBillRequest()
从该字段读取。
声明两个字段volatile
就足够了吗?您对 volatile读写重新排序有什么看法?我的代码安全吗?