Java重點(diǎn)難點(diǎn)一句話總結(jié)

常用的幾種單例模式

懶加載線程安全
public class Manager {
    private Manager instance = null;

    Manager getIntance() {
        if (instance == null) {
            sycnronize (this) {
                if (instance == null) {
                    instance = new Manager();
                    return instance;
                }
            }
        }
        return instance;
        
    }

    private Manager(){
    }

}

餓漢模式
public class Manager {
    private static final Manager instance = new Manager();
    private Manager(){
    }

    public static void getInstance() {
        return instance;
    }

}

懶漢模式
public class Manager {
    private Manager(){
    }

    public static void getInstance() {
        return SingletonHolder.instance;
    }

    private static class SingletonHolder {
        public static final Manager instance = new Manager();
    }

}

生產(chǎn)者消費(fèi)者模式

  • semapore實(shí)現(xiàn)
    https://blog.csdn.net/mm_bit/article/details/50010623
    // 非滿鎖
    final Semaphore notFull = new Semaphore(10);
    // 非空鎖
    final Semaphore notEmpty = new Semaphore(0);
    // 核心鎖
    final Semaphore mutex = new Semaphore(1);

  • blockingqueue無需同步鎖
    https://www.cnblogs.com/fankongkong/p/7339848.html
    private BlockingQueue resourceQueue = new LinkedBlockingQueue(10);
    resourceQueue.put(1);
    resourceQueue.take();

  • lock/condition/await/signalAll
    核心防沖突鎖 Lock lock = new ReentrantLock();
    是否滿的條件 Condition producerCondition = lock.newCondition();
    非空的條件 ondition consumerCondition = lock.newCondition();

HashMap的內(nèi)部結(jié)構(gòu)? 內(nèi)部原理?

https://www.cnblogs.com/stevenczp/p/7028071.html
JDK1.7中

使用一個(gè)Entry數(shù)組來存儲(chǔ)數(shù)據(jù),用key的hashcode取模來決定key會(huì)被放到數(shù)組里的位置,如果hashcode相同,或者h(yuǎn)ashcode取模后的結(jié)果相同(hash collision),那么這些key會(huì)被定位到Entry數(shù)組的同一個(gè)格子里,這些key會(huì)形成一個(gè)鏈表。
在hashcode特別差的情況下,比方說所有key的hashcode都相同,這個(gè)鏈表可能會(huì)很長(zhǎng),那么put/get操作都可能需要遍歷這個(gè)鏈表
也就是說時(shí)間復(fù)雜度在最差情況下會(huì)退化到O(n)

JDK1.8中
使用一個(gè)Node數(shù)組來存儲(chǔ)數(shù)據(jù),但這個(gè)Node可能是鏈表結(jié)構(gòu),也可能是紅黑樹結(jié)構(gòu)
如果插入的key的hashcode相同,那么這些key也會(huì)被定位到Node數(shù)組的同一個(gè)格子里。
如果同一個(gè)格子里的key不超過8個(gè),使用鏈表結(jié)構(gòu)存儲(chǔ)。
如果超過了8個(gè),那么會(huì)調(diào)用treeifyBin函數(shù),將鏈表轉(zhuǎn)換為紅黑樹。
那么即使hashcode完全相同,由于紅黑樹的特點(diǎn),查找某個(gè)特定元素,也只需要O(log n)的開銷
也就是說put/get的操作的時(shí)間復(fù)雜度最差只有O(log n)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本系列出于AWeiLoveAndroid的分享,在此感謝,再結(jié)合自身經(jīng)驗(yàn)查漏補(bǔ)缺,完善答案。以成系統(tǒng)。 Java基...
    濟(jì)公大將閱讀 1,623評(píng)論 1 6
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,456評(píng)論 0 16
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,740評(píng)論 18 399
  • 接口/抽象類意義規(guī)范、擴(kuò)展、回調(diào)為其子類提供一個(gè)公共的類型 封裝子類中得重復(fù)內(nèi)容 定義抽象方法,子類雖然有不同的實(shí)...
    MigrationUK閱讀 2,348評(píng)論 1 28
  • 希望時(shí)間快一點(diǎn),想知道給自己設(shè)定的大目標(biāo)有沒有實(shí)現(xiàn);希望時(shí)間慢一點(diǎn),自己慢一點(diǎn)長(zhǎng)大,親人也會(huì)慢一點(diǎn)變老…… 經(jīng)常陷...
    會(huì)說話的pig閱讀 557評(píng)論 10 7

友情鏈接更多精彩內(nèi)容