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

資訊專欄INFORMATION COLUMN

線程的同步

wind5o / 2657人閱讀

摘要:線程是程序執(zhí)行中的最小單元,依賴進(jìn)程存在。線程的同步可以理解為該線程在未返回結(jié)果之前你處于阻塞狀態(tài)。

WHAT

線程是程序執(zhí)行中的最小單元,依賴進(jìn)程存在。線程的同步可以理解為該線程在未返回結(jié)果之前你處于阻塞狀態(tài)。

WHY

在JAVA多線程并發(fā)中,當(dāng)多個(gè)線程同時(shí)操作一個(gè)共享資源時(shí),可能會發(fā)生資源數(shù)據(jù)的不準(zhǔn)確,或者是數(shù)據(jù)的沖突,為了避免此類情況的發(fā)生,需要在一個(gè)線程操作該資源時(shí),將該資源鎖定,使得其他線程不可對此資源進(jìn)行操作,以保證資源數(shù)據(jù)的準(zhǔn)確性。

HOW
1.同步方法

使用synchronized關(guān)鍵字修飾的方法,如:
public synchronized void save(){}

2.同步代碼塊

使用synchronized關(guān)鍵字修飾的語句塊,如:
synchronized(object){}

3.使用特殊域變量(volatile)

 //需要同步的變量加上volatile
 private volatile int account = 100;

4.使用重入鎖

 class Bank {

        private int account = 100;
        //需要聲明這個(gè)鎖
        private Lock lock = new ReentrantLock();
        public int getAccount() {
            return account;
        }
        //這里不再需要synchronized 
        public void save(int money) {
            lock.lock();
            try{
                account += money;
            }finally{
                lock.unlock();
            }

        }
    }

5.使用ThreadLocal

    public class Bank{
        //使用ThreadLocal類管理共享變量account
        private static ThreadLocal account = new ThreadLocal(){
            @Override
            protected Integer initialValue(){
                return 100;
            }
        };
        public void save(int money){
            account.set(account.get()+money);
        }
        public int getAccount(){
            return account.get();
        }
    }

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

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

相關(guān)文章

  • Java? 教程(同步

    同步 線程主要通過共享對字段和引用對象的引用字段的訪問來進(jìn)行通信,這種通信形式非常有效,但可能產(chǎn)生兩種錯(cuò)誤:線程干擾和內(nèi)存一致性錯(cuò)誤,防止這些錯(cuò)誤所需的工具是同步。 但是,同步可能會引入線程競爭,當(dāng)兩個(gè)或多個(gè)線程同時(shí)嘗試訪問同一資源并導(dǎo)致Java運(yùn)行時(shí)更慢地執(zhí)行一個(gè)或多個(gè)線程,甚至?xí)和K鼈儓?zhí)行,饑餓和活鎖是線程競爭的形式。 本節(jié)包括以下主題: 線程干擾描述了當(dāng)多個(gè)線程訪問共享數(shù)據(jù)時(shí)如何引入錯(cuò)誤。...

    Edison 評論0 收藏0
  • Java011-多線程

    摘要:多線程進(jìn)程正在進(jìn)行中的程序。所以容易出現(xiàn)線程安全問題。等待喚醒機(jī)制涉及的方法將同步中的線程處于凍結(jié)狀態(tài)。返回該線程的字符串表示形式,包括線程名稱優(yōu)先級和線程組。暫停當(dāng)前正在執(zhí)行的線程對象,并執(zhí)行其他線程。 多線程:進(jìn)程:正在進(jìn)行中的程序。其實(shí)進(jìn)程就是一個(gè)應(yīng)用程序運(yùn)行時(shí)的內(nèi)存分配空間。線程:其實(shí)就是進(jìn)程中一個(gè)程序執(zhí)行控制單元,一條執(zhí)行路徑。進(jìn)程負(fù)責(zé)的是應(yīng)用程序的空間的標(biāo)示。線程負(fù)責(zé)的是應(yīng)...

    gekylin 評論0 收藏0
  • java多線程編程核心技術(shù) 2

    摘要:在兩個(gè)線程訪問同一個(gè)對象中的同步方法時(shí)一定是線程安全的。當(dāng)一個(gè)線程訪問的一個(gè)同步代碼塊時(shí),其他線程對同一個(gè)鐘所有其他同步代碼塊的訪問被阻塞,這說明使用的對象監(jiān)視器是一個(gè)。 非線程安全其實(shí)會在多個(gè)線程對同一個(gè)對象中的實(shí)例變量進(jìn)行并發(fā)訪問時(shí)發(fā)生,產(chǎn)生的后果就是臟讀,也就是取到的數(shù)據(jù)其實(shí)是被更改過的。而線程安全就是以獲得的實(shí)例變量的值是經(jīng)過同步處理的,不會出現(xiàn)臟讀的現(xiàn)象。 非線程安全問題存...

    wangxinarhat 評論0 收藏0
  • Java 多線程

    摘要:當(dāng)一個(gè)程序運(yùn)行時(shí),內(nèi)部可能包含了多個(gè)順序執(zhí)行流,每個(gè)順序執(zhí)行流就是一個(gè)線程所有運(yùn)行中的任務(wù)通常對應(yīng)一個(gè)進(jìn)程。線程也被稱作輕量級進(jìn)程,線程是進(jìn)程的執(zhí)行單元。在線程的生命周期中,它要經(jīng)過新 線程概述 線程和進(jìn)程 幾乎所有的操作系統(tǒng)都支持同時(shí)運(yùn)行多個(gè)任務(wù),一個(gè)任務(wù)通常就是一個(gè)程序,每個(gè)運(yùn)行中的程序就是一個(gè)進(jìn)程。當(dāng)一個(gè)程序運(yùn)行時(shí),內(nèi)部可能包含了多個(gè)順序執(zhí)行流,每個(gè)順序執(zhí)行流就是一個(gè)線程 所有運(yùn)...

    zorro 評論0 收藏0
  • 線程安全

    摘要:不可變在中,不可變的對象一定是線程安全的。在里標(biāo)注自己是線程安全的類,大多都不是絕對線程安全,比如某些情況下類在調(diào)用端也需要額外的同步措施。無同步方案要保證線程安全,不一定就得需要數(shù)據(jù)的同步,兩者沒有因果關(guān)系。 在之前學(xué)習(xí)編程的時(shí)候,有一個(gè)概念根深蒂固,即程序=算法+數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)代表問題空間中的客體,代碼就用來處理這些數(shù)據(jù),這種思維是站在計(jì)算機(jī)的角度去抽象問題和解決問題,稱之為面向過...

    fuyi501 評論0 收藏0
  • Java 重入鎖 ReentrantLock 原理分析

    摘要:的主要功能和關(guān)鍵字一致,均是用于多線程的同步。而僅支持通過查詢當(dāng)前線程是否持有鎖。由于和使用的是同一把可重入鎖,所以線程可以進(jìn)入方法,并再次獲得鎖,而不會被阻塞住。公平與非公平公平與非公平指的是線程獲取鎖的方式。 1.簡介 可重入鎖ReentrantLock自 JDK 1.5 被引入,功能上與synchronized關(guān)鍵字類似。所謂的可重入是指,線程可對同一把鎖進(jìn)行重復(fù)加鎖,而不會被阻...

    lx1036 評論0 收藏0

發(fā)表評論

0條評論

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