正在声明两个字段volatile就足够了



我现在正在编写一个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读写重新排序,您能说些什么?我的代码安全吗

不要依赖volatile做任何事情。旧的记忆模式被打破了,这就是为什么有了新的记忆模式。

将对字段的访问与对象同步。这是保证写/读安全的唯一方法。(即Object obj=new Object();并且在每种方法中:同步(obj){})

最新更新