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

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

在int變量上使用時(shí),易失性關(guān)鍵字的行為不符合預(yù)期

在int變量上使用時(shí),易失性關(guān)鍵字的行為不符合預(yù)期

慕哥9229398 2021-05-07 14:58:24
import java.util.ArrayList;public class ThreadTest {    public static void main(String[] args) {        ArrayList arr = new ArrayList();                for (int  i =0; i<10 ; i++)            arr.add(new MyTh(i));           for (int  i =0; i<10 ; i++) {            ((Thread ) arr.get(i)).start();        }    }}class MyTh extends Thread {   int num;   volatile int  age;   MyTh (int  k)   {this.num=k; }    @Override   public void run() {    if(this.num==4){        setAge(40);    }    System.out.println(Thread.currentThread().getName() + " :"+this.num + ":" + getAge());}    synchronized int getAge() {       return age;    }    synchronized void  setAge(int  k) {        this.age =k;    }}我在這里感到困惑,為什么程序的輸出只打印一次volatile變量age = 40的值。我試圖使兩者在getter / setter中保持同步,然后也只有第4個(gè)單線(xiàn)程將其打印40。為什么其他后續(xù)線(xiàn)程也不能讀取它40?Thread-0 :0:0Thread-1 :1:0Thread-2 :2:0Thread-3 :3:0Thread-4 :4:40Thread-5 :5:0Thread-6 :6:0Thread-7 :7:0Thread-8 :8:0Thread-9 :9:0
查看完整描述

3 回答

?
犯罪嫌疑人X

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

這里有兩件事:

  1. 您正在使用實(shí)例變量age并創(chuàng)建10個(gè)MyTh類(lèi)實(shí)例,因此每個(gè)實(shí)例將擁有自己的副本,并且不會(huì)干擾彼此的操作。因此,根據(jù)@tanyehzheng的建議,您必須將其設(shè)置為靜態(tài),以便可以在所有10個(gè)實(shí)例之間共享。

  2. 您的問(wèn)題是,如果我們使用static,volatile將產(chǎn)生什么變化

    • static僅聲明該副本將在所有實(shí)例之間共享,并且在多個(gè)線(xiàn)程嘗試更新/訪(fǎng)問(wèn)它的情況下,它不保證內(nèi)存可見(jiàn)性。

    • 另一方面,volatile將保證內(nèi)存可見(jiàn)性,即,如果對(duì)該變量進(jìn)行了任何寫(xiě)操作,則所有后續(xù)讀取都將看到最新值(happens-before關(guān)系)。如果僅使用靜態(tài),則不可能實(shí)現(xiàn),因?yàn)镃PU內(nèi)核可能會(huì)緩存該值或?qū)⑵浯鎯?chǔ)在寄存器中。


查看完整回答
反對(duì) 回復(fù) 2021-05-19
  • 3 回答
  • 0 關(guān)注
  • 128 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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