国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java并發(fā)編程學(xué)習(xí)之synchronize(一)

Elle / 2163人閱讀

摘要:線程安全問(wèn)題在并發(fā)編程學(xué)習(xí)之基礎(chǔ)概念提到,多線程的劣勢(shì)之一,有個(gè)線程安全問(wèn)題,現(xiàn)在看看下面的例子。那么,該怎么解決呢,很簡(jiǎn)單,在方法前加個(gè)同步鎖。運(yùn)行結(jié)果如下有兩種情況,是因?yàn)榭凑l(shuí)先搶占鎖,但是輸出的算法結(jié)果是正確的。

線程安全問(wèn)題

在java并發(fā)編程學(xué)習(xí)之基礎(chǔ)概念提到,多線程的劣勢(shì)之一,有個(gè)線程安全問(wèn)題,現(xiàn)在看看下面的例子。

public class NotSafeDemo {
    private int num = 0;

     public void add(int value) {
        try {
            num = num + value;
            Thread.sleep(100);
            System.out.println("num:" + num);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        NotSafeDemo synchronizeDemo = new NotSafeDemo();
        AddThread1 addThread1 = new AddThread1(synchronizeDemo);
        AddThread2 addThread2 = new AddThread2(synchronizeDemo);
        addThread1.start();
        addThread2.start();
    }
}

class AddThread1 extends Thread {
    NotSafeDemo synchronizeDemo;

    public AddThread1(NotSafeDemo synchronizeDemo) {
        this.synchronizeDemo = synchronizeDemo;
    }

    @Override
    public void run() {
        synchronizeDemo.add(1);

    }
}

class AddThread2 extends Thread {
    NotSafeDemo synchronizeDemo;

    public AddThread2(NotSafeDemo synchronizeDemo) {
        this.synchronizeDemo = synchronizeDemo;
    }

    @Override
    public void run() {
        synchronizeDemo.add(2);
    }
}

運(yùn)行結(jié)果如下:

為什么會(huì)不安全呢,在java并發(fā)編程學(xué)習(xí)之基礎(chǔ)概念提過(guò),兩個(gè)線程共享一個(gè)進(jìn)程的資源,也就是說(shuō),num這個(gè)值,是共享的,在還沒(méi)輸出num的時(shí)候,已經(jīng)被第二個(gè)線程,改成3,所以兩次輸出都是3。那么,該怎么解決呢,很簡(jiǎn)單,在方法前加個(gè)同步鎖synchronized。

synchronized public void add(int value) {
        try {
            int temp = num;
            num = num + value;
            Thread.sleep(100);
            System.out.println(value + "+" + temp + "=" + num);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

運(yùn)行結(jié)果如下:

有兩種情況,是因?yàn)榭凑l(shuí)先搶占鎖,但是輸出的算法結(jié)果是正確的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75147.html

相關(guān)文章

  • java并發(fā)編程學(xué)習(xí)之線程的生命周期-wait,notify,notifyall(六)

    摘要:不釋放持有的鎖,釋放鎖。在調(diào)用方法前,必須持有鎖,調(diào)用喚醒,也要持有鎖。休眠一定時(shí)間后,進(jìn)入就緒狀態(tài)。這兩個(gè)都能被方法中斷當(dāng)前狀態(tài)。用法方獲取鎖判斷條件,不滿足繼續(xù)滿足執(zhí)行其他業(yè)務(wù)方獲取鎖改變條件通知為什么是而不是會(huì)一直循環(huán),直到條件滿足。 sleep和wait sleep是Thread類的方法,wait是Object的方法。 sleep可以到處使用,wait必須是在同步方法或者代碼...

    Terry_Tai 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之cas()

    摘要:線程把的值放在中。線程執(zhí)行,得到的為。,,獨(dú)占鎖,會(huì)導(dǎo)致其他所有需要鎖的線程掛起,等待持有鎖的線程釋放鎖。可見(jiàn)性,不保證原子性。樂(lè)觀鎖,不適用鎖的情況下實(shí)現(xiàn)多線程的變量同步。性能問(wèn)題在并發(fā)量較高的情況下,如果一直不成功,會(huì)一直增加的開(kāi)銷。 cas原理 cas全稱Compare and swap,比較和交換的意思。原子操作,需要硬件的支持。三個(gè)基本操作數(shù):內(nèi)存地址V,舊的預(yù)期值A(chǔ),要修改...

    ConardLi 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之synchronize(二)

    摘要:的應(yīng)用方式代碼塊作用范圍在中,作用對(duì)象是調(diào)用這個(gè)代碼塊的對(duì)象。方法進(jìn)來(lái)了出來(lái)了運(yùn)行的結(jié)果如下等把方法執(zhí)行完,釋放了的鎖,才開(kāi)始執(zhí)行。靜態(tài)方法運(yùn)行的結(jié)果如下等待執(zhí)行完才執(zhí)行,說(shuō)明是類鎖類所的另外一種形式運(yùn)行結(jié)果如下 synchronized的應(yīng)用方式 代碼塊:作用范圍在{}中,作用對(duì)象是調(diào)用這個(gè)代碼塊的對(duì)象。 方法:作用范圍是一個(gè)方法,作用對(duì)象是調(diào)用這個(gè)方法的對(duì)象。 靜態(tài)方法:作用范圍...

    darkbaby123 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之顯示鎖Lock

    摘要:顯示鎖和內(nèi)置鎖內(nèi)置鎖優(yōu)勢(shì)代碼簡(jiǎn)潔不會(huì)因?yàn)闆](méi)釋放鎖,導(dǎo)致鎖泄露。顯示鎖優(yōu)勢(shì)靈活性強(qiáng),鎖的獲取可以被中斷,可以嘗試獲取鎖。接口接口主要方法如下獲取鎖嘗試獲取鎖,表示未加鎖的情況。會(huì)進(jìn)行搶鎖操作,如果獲取不到鎖,也會(huì)進(jìn)入阻塞隊(duì)列等到喚醒。 顯示鎖和內(nèi)置鎖 內(nèi)置鎖(Synchronized)優(yōu)勢(shì) 代碼簡(jiǎn)潔 不會(huì)因?yàn)闆](méi)釋放鎖,導(dǎo)致鎖泄露。 顯示鎖(Lock)優(yōu)勢(shì) 靈活性強(qiáng),鎖的獲取可以被中...

    zone 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之線程的生命周期-interrupt(七)

    摘要:和是配套使用的,方法容易導(dǎo)致死鎖。方法不會(huì)保證線程的資源正常釋放方法給線程打個(gè)停止標(biāo)記,將線程的中斷狀態(tài)設(shè)置為,并沒(méi)有馬上強(qiáng)制中斷線程,線程是否中斷由線程自己決定。終結(jié)狀態(tài),還是返回。方法判斷當(dāng)前線程是否中斷,清除中斷標(biāo)志。 resume、suspend、stop resume和suspend是配套使用的,suspend方法容易導(dǎo)致死鎖。 stop方法不會(huì)保證線程的資源正常釋放 i...

    maxmin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<