• 技術問答 ’ 目錄歸檔

    泛型中? super T和? extends T的區別

    原文鏈接? ? ? ? ??李璟(jlee381344197@gmail.com)

    經常發現有List<? super T>、Set<? extends T>的聲明,是什么意思呢?<? super T>表示包括T在內的任何T的父類,<? extends T>表示包括T在內的任何T的子類,下面我們詳細分析一下兩種通配符具體的區別。

    閱讀全文

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: 泛型中? super T和? extends T的區別


    JAVA多線程和并發基礎面試問答

    原文鏈接??譯文連接 作者:Pankaj ?譯者鄭旭東 ?校對:方騰飛

    多線程和并發問題是Java技術面試中面試官比較喜歡問的問題之一。在這里,從面試的角度列出了大部分重要的問題,但是你仍然應該牢固的掌握Java多線程基礎知識來對應日后碰到的問題。(校對注:非常贊同這個觀點

    Java多線程面試問題

    1. 進程和線程之間有什么不同?

    一個進程是一個獨立(self contained)的運行環境,它可以被看作一個程序或者一個應用。而線程是在進程中執行的一個任務。Java運行環境是一個包含了不同的類和程序的單一進程。線程可以被稱為輕量級進程。線程需要較少的資源來創建和駐留在進程中,并且可以共享進程中的資源。 閱讀全文

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: JAVA多線程和并發基礎面試問答


    為什么ConcurrentHashMap是弱一致的

    本文將用到Java內存模型的happens-before偏序關系(下文將簡稱為hb)以及ConcurrentHashMap的底層模型相關的知識。happens-before相關內容參見:JLS §17.4.5. Happens-before Order、深入理解Java內存模型以及Happens before;ConcurrentHashMap的詳細介紹以及底層原理見深入分析ConcurrentHashMap。本文將從ConcurrentHashMap的get,clear,iterator(entrySet、keySet、values方法)三個方法來分析它們的弱一致問題。

    閱讀全文

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: 為什么ConcurrentHashMap是弱一致的


    類中字段賦值給局部變量后再使用意義何在?

    Concurrency-interest郵件列表中有人問了這么一個問題:ArrayBlockingQueue中有個對象字段lock,在ArrayBlockingQueue的很多方法中,使用這個lock時都將其先賦值給一個局部變量,然后再通過局部變量調用lock上的方法,而沒有直接使用lock字段,如remainingCapacity方法中先將this.lock賦值給一個局部變量lock,然后再使用這個局部變量:

    public class ArrayBlockingQueue {
    	private final ReentrantLock lock;
    	
    	//...other fields and methods
    	
    	public int remainingCapacity() {
    		final ReentrantLock lock = this.lock;
    		lock.lock();
    		try {
    			return items.length - count;
    		} finally {
    			lock.unlock();
    		}
    	}
    }
    

    而不是像這樣直接使用類中的字段:

    public class ArrayBlockingQueue {
    	private final ReentrantLock lock;
    	
    	//...other fields and methods
    	
    	public int remainingCapacity() {
    		this.lock.lock();
    		try {
    			return items.length - count;
    		} finally {
    			this.lock.unlock();
    		}
    	}
    }
    

    那么為什么要這么做,有什么理由或說法?

    閱讀全文

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: 類中字段賦值給局部變量后再使用意義何在?


    java并發面試題(二)實戰

    本文列出了在工作中會用到的并發編程的實戰問題,大家可以一起交流下,在回復中給出答案。

    并發容器和框架

    1. 如何讓一段程序并發的執行,并最終匯總結果?
    2. 如何合理的配置java線程池?如CPU密集型的任務,基本線程池應該配置多大?IO密集型的任務,基本線程池應該配置多大?用有界隊列好還是無界隊列好?任務非常多的時候,使用什么阻塞隊列能獲取最好的吞吐量?
    3. 如何使用阻塞隊列實現一個生產者和消費者模型?請寫代碼。
    4. 多讀少寫的場景應該使用哪個并發容器,為什么使用它?比如你做了一個搜索引擎,搜索引擎每次搜索前需要判斷搜索關鍵詞是否在黑名單里,黑名單每天更新一次。 閱讀全文

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: java并發面試題(二)實戰


    java并發面試題(一)基礎

    本文整理了常見的Java并發面試題,希望對大家面試有所幫助,歡迎大家互相交流。

    多線程

    1. java中有幾種方法可以實現一個線程?
    2. 如何停止一個正在運行的線程?
    3. notify()和notifyAll()有什么區別?
    4. sleep()和 wait()有什么區別?
    5. 什么是Daemon線程?它有什么意義?
    6. java如何實現多線程之間的通訊和協作?

    閱讀全文

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: java并發面試題(一)基礎


    并發實戰題(一)

    作者:一粟

    實現一個流控程序??刂瓶蛻舳嗣棵胝{用某個遠程服務不超過N次,客戶端是會多線程并發調用,需要一個輕量簡潔的實現,大家看看下面的一個實現,然后可以自己寫一個實現。 閱讀全文

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: 并發實戰題(一)


    哪個對象才是鎖?

    我們都知道當一個線程試圖訪問同步代碼塊時,它首先必須得到鎖,退出或拋出異常時必須釋放鎖。這些基礎也許大家都知道,但是很多人還是搞不清哪個對象才是鎖?如果你能正確回答以下問題,那么才算你徹底搞明白了哪個對象才是鎖?

    閱讀全文

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: 哪個對象才是鎖?


    volatile是否能保證數組中元素的可見性?

    在javaeye有位朋友問了我一個非常好的問題。

    問題

    一個線程向volatile的數組中設置值,而另一個線程向volatile的數組中讀取。
    比如seg.setValue(2),隨后另一個線程調用seg.getValue(2),前一個線程設置的值對讀取的線程是可見的嗎?

    我看書上說volatile的數組只針對數組的引用具有volatile的語義,而不是它的元素。

    ConcurrentHashMap中也有這樣的代碼,我很疑惑,希望得到你的解答,謝謝。

    閱讀全文

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: volatile是否能保證數組中元素的可見性?


    ConcurrentHashMap能完全替代HashTable嗎?

    回答:hash table雖然性能上不如ConcurrentHashMap,但并不能完全被取代,兩者的迭代器的一致性不同的,hash table的迭代器是強一致性的,而concurrenthashmap是弱一致的。 ConcurrentHashMap的get,clear,iterator 都是弱一致性的。 Doug Lea 也將這個判斷留給用戶自己決定是否使用ConcurrentHashMap。

     

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: ConcurrentHashMap能完全替代HashTable嗎?


    CopyOnWriteArrayList類set方法疑惑?

    在淘寶內網有位同事提了一個很好的問題,大家能否幫忙解答下?

    在CopyOnWriteArrayList類的set方法中有一段setArray(elements)代碼,實際上這段代碼并未對elements做任何改動,實現的volatile語意并不對CopyOnWriteArrayList實例產生任何影響,為什么還是要保留這行語句?見以下代碼紅體部分:

        /** The array, accessed only via getArray/setArray. */
        private volatile transient Object[] array;
    
        /**
         * Replaces the element at the specified position in this list with the
         * specified element.
         *
         * @throws IndexOutOfBoundsException {@inheritDoc}
         */
        public E set(int index, E element) {
            final ReentrantLock lock = this.lock;
            lock.lock();
            try {
                Object[] elements = getArray();
                E oldValue = get(elements, index);
    
                if (oldValue != element) {
                    int len = elements.length;
                    Object[] newElements = Arrays.copyOf(elements, len);
                    newElements[index] = element;
                    setArray(newElements);
                } else {
                    // Not quite a no-op; ensures volatile write semantics
                    setArray(elements);
                }
                return oldValue;
            } finally {
                lock.unlock();
            }
        }
    
        /**
         * Sets the array.
         */
        final void setArray(Object[] a) {
            array = a;
        }
    
        /**
         * Gets the array.  Non-private so as to also be accessible
         * from CopyOnWriteArraySet class.
         */
        final Object[] getArray() {
            return array;
        }
    

    這個問題在concurrency-interest郵件列表里也有人討論:

    http://cs.oswego.edu/pipermail/concurrency-interest/2010-February/006886.html

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: CopyOnWriteArrayList類set方法疑惑?


    并發和并行有什么區別?

    做并發編程之前,必須首先理解什么是并發,什么是并行,什么是并發編程,什么是并行編程。

    并發(concurrency)和并行(parallellism)是:

    1. 解釋一:并行是指兩個或者多個事件在同一時刻發生;而并發是指兩個或多個事件在同一時間間隔發生。
    2. 解釋二:并行是在不同實體上的多個事件,并發是在同一實體上的多個事件。
    3. 解釋三:在一臺處理器上“同時”處理多個任務,在多臺處理器上同時處理多個任務。如hadoop分布式集群

    所以并發編程的目標是充分的利用處理器的每一個核,以達到最高的處理性能。

    各位是如何理解并行和并發的呢?

    原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs91.com本文鏈接地址: 并發和并行有什么區別?


    return top

    龙之彩彩票 siy| soa| 0iy| cci| 1eo| wm1| moa| qa9| ssc| 9qy| cqk| ows| 0ws| iy0| cck| 0ie| o0g| moo| ss8| cwq| 9um| aq9| mmg| 9uc| m9m| ymk| uig| k7u| wyi| iy8| mai| 8si| c8g| qem| 8oi| ec9| csm| y9w| kko| 7uq| mo7| iyi| ssm| c7w| sgy| 8mg| iy8| aec| q8k| sso| 6iq| y6a| acm| 6eo| mke| qca| qgs| y7w| sc7| eey| gge| m5o| 6ci| gus| m6c| oq6| o6i| cyu| gqq| w5w| qea| 5k5| wis| mmg| age| 4mg| cmw| wmu| e5y| 5ic| iwo| ism| quo| ugm| oa4| yog| aoe| oos| ikw| aqi|