第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么沒(méi)有“易失性”的程序會(huì)起到“易失性”的作用?

為什么沒(méi)有“易失性”的程序會(huì)起到“易失性”的作用?

心有法竹 2023-10-13 09:47:55
如下所示,該程序有一個(gè)共享變量,flag但不帶volatile:public class T {    public static void main(String[] args) {        TT jump = new TT(() -> {            while (true) {                if (TT.flag) {                    System.out.println("jump");                    break;                }            }        });        jump.start();        new TT(() -> {            TT.flag = true; // P1            LocalDateTime t1 = LocalDateTime.now();            while (true) {                if (Duration.between(t1, LocalDateTime.now()).toMillis() > 100) {                    break;                }            }            System.out.println("flag");        }).start();    }    static class TT extends Thread {        public static boolean flag = false;        public TT(Runnable o) {            super(o);        }    }}程序總是正常返回。所以我相信設(shè)置為 的行已P1在其他線程中更新。flagtrueflag但為什么?flag不是易失性的,為什么它的值會(huì)立即更新?總是!
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

但為什么?flag不是易失性的,為什么它的值會(huì)立即更新?總是!

你只是幸運(yùn)而已;或不幸,取決于你的觀點(diǎn)。我在 Ideone 上嘗試了這個(gè),發(fā)現(xiàn)它超時(shí)而不是正常終止。

請(qǐng)記?。簾o(wú)法觀察到并發(fā)錯(cuò)誤并不等同于不存在并發(fā)錯(cuò)誤。

您對(duì)代碼最有把握的是,根據(jù)規(guī)范,您可以證明不存在錯(cuò)誤。這并不意味著代碼就能正常工作;而是意味著代碼可以正常工作。這只是意味著問(wèn)題出在 JVM 實(shí)現(xiàn)上。

特別是,您無(wú)法證明此代碼將正常工作,因?yàn)榈诙€(gè)線程中的寫(xiě)入與第一個(gè)線程中的讀取之間不存在發(fā)生之前關(guān)系。flag添加volatile創(chuàng)建了這種保證,因?yàn)橐资詫?xiě)入發(fā)生在易失性讀取之前。

這并不是說(shuō)沒(méi)有 volatile 就永遠(yuǎn)無(wú)法工作,只是不能保證:JVM 只需要至少按照規(guī)范要求的頻率刷新線程的緩存值,但可以更頻繁地執(zhí)行此操作,或者實(shí)際上根本不緩存值。


查看完整回答
反對(duì) 回復(fù) 2023-10-13
  • 1 回答
  • 0 關(guān)注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)