<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    duansky'weblog

    統計

    留言簿(3)

    友情鏈接

    閱讀排行榜

    評論排行榜

    Java并發編程基礎知識片段

    Java 5并發包的加入,給Java的并發程序的開發帶來了很多的好處,在此列舉一些并發編程中應該掌握的一些基礎知識片斷,這些片斷基本都是由一些問題組成,在片段中沒有直接寫出答案,由于可用來解決這些片段的方法還是很多的,因此只是提到了解決問題可選方案的關鍵字,如果有需要進一步了解的話,基本上google一下應該就能查出來了,不過就像之前有朋友說的,如果不是經常用的話,其實就算現在知道了也是會忘記的,這很正常,:),不過我更認為那是因為知其然而不知其所以然造成的,很多東西如果知道原理的話,基本上還是可以記得很長一段時間的。
    片斷一
    在main中啟動兩個線程,例如:
    ??? Thread a=new Thread(){
    ??????? public void run(){
    ???????????? System.out.println("Call A");
    ???????????? try{
    ????????????????? Thread.sleep(1000);
    ???????????? }
    ???????????? catch(Exception e){
    ???????????????? e.printStackTrace();
    ???????????? }
    ??????? }
    ??? };
    ??? Thread b=new Thread(){
    ??????? public void run(){
    ???????????? try{
    ????????????????? Thread.sleep(500);
    ???????????? }
    ???????????? catch(Exception e){
    ???????????????? e.printStackTrace();
    ???????????? }
    ???????????? System.out.println("Call B");
    ??????? }
    ??? };???
    ??? a.start();
    ??? b.start();???
    ??? System.out.println("execute here");
    在這樣的方式下,執行時會出現什么樣的效果;
    怎么樣才能保證字符串的打印順序是:"Call B"-->"Call A"-->"execute here"呢?(提示:join、wait/notify、Semphore、Lock等)
    在做到了上面打印順序控制后,怎么樣才能做到如果線程b執行了100毫秒還沒執行完的話則直接繼續線程a的執行呢?(提示:ExecutorServices、Future)
    片段二
    也是個控制順序的問題,假設有如下一段代碼:
    for(int i=0;i<10;i++){
    ??? Thread thread=new Thread(){
    ??????? public void run(){
    ??????????? ...
    ??????? }
    ??? };
    ??? thread.setName("Thread-"+i);
    ??? thread.start();
    }
    System.out.println("All Executed");
    需要做到所有線程同時運行,而不是按照for的順序一個一個啟動,并且要求All Executed需要在所有線程都執行完畢后才打印,有什么辦法做到呢?(提示:CountDownLatch等)
    片段三
    Map<String,Object> datas=new ConcurrentHashMap<String,Object>();
    public Object get(String keyName){
    ??? Object data=null;
    ??? if(!datas.containsKey(keyName)){
    ???????? data=createData(keyName);
    ???????? datas.put(keyName,data);
    ??? }
    ??? else{
    ???????? data=datas.get(keyName;)
    ??? }
    ??? return data;
    }
    上面這段代碼在并發時會出什么問題呢,為什么?
    如果有問題的話,應該怎么去解決呢?(提示:Synchronized、Lock、FutureTask等)
    片段四
    ThreadPoolExecutor executor=new ThreadPoolExecutor(10,100,60L,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(20),new ThreadPoolExecutor.AbortPolicy());
    一個這樣的線程池,當并發請求數為15時會是怎么個狀況?(池的使用狀況,例如活動線程數、隊列中的數等)
    當并發請求數為100的時候是什么狀況?
    當并發請求數為200的時候是什么狀況?
    當30秒內不再有請求時會怎么樣?
    當2分鐘內沒有請求時會怎么樣?
    如果換成以下方式初始化池又會怎么樣呢:
    ThreadPoolExecutor executor=new ThreadPoolExecutor(10,150,20L,TimeUnit.SECONDS,new SynchronousQueue<Runnable>(),new ThreadPoolExecutor.AbortPolicy());
    片段五
    怎么查看jvm中線程的執行狀況,線程的狀態有哪幾種,分別表示什么含義?
    ThreadFactory有什么用?
    如果要捕捉線程中拋出的異常,可以怎么做呢?
    如果TimerTask拋出運行時異常會不會影響到同一個Timer中其他的TimerTask的執行呢,SchedularThreadPoolExecutor和Timer有什么不同?
    片段六
    常見的一個例子:
    private int count;
    public synchronized int getNext(){
    ??? return count++;
    }
    在JDK5有什么別的方法來進行實現嗎?
    像JDK5中的AtomicInteger的incrementAndGet是怎么實現的呢?
    如果這個count要按線程來獨立管理,即每個線程有自己的一個count,要怎么做呢?

    轉自: http://www.tkk7.com/BlueDavy/archive/2008/06/20/209297.html

    posted on 2009-06-18 22:06 duansky 閱讀(181) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 在线免费观看韩国a视频| 99精品全国免费观看视频..| 亚洲精品V欧洲精品V日韩精品| 亚洲性线免费观看视频成熟| 91免费福利视频| 免费国产黄网站在线看| 亚洲国产精品综合久久2007| 国产亚洲一区区二区在线| 国产精品四虎在线观看免费 | 久久亚洲精品成人无码网站| 久久激情亚洲精品无码?V| 国产精品va无码免费麻豆| 女人18特级一级毛片免费视频| 日韩精品人妻系列无码专区免费 | 黄色短视频免费看| g0g0人体全免费高清大胆视频| 亚洲国产精品网站在线播放| 亚洲自国产拍揄拍| 精品久久亚洲中文无码| 久久亚洲最大成人网4438| 夜夜亚洲天天久久| 亚洲国产精品综合久久网各| 91亚洲导航深夜福利| 亚洲jjzzjjzz在线播放| 77777午夜亚洲| 亚洲av成人无码网站…| 国产精品亚洲片在线花蝴蝶| 日产久久强奸免费的看| 深夜福利在线视频免费| 中文字幕免费观看全部电影| 国产真人无码作爱视频免费 | 国产午夜成人免费看片无遮挡 | 国产亚洲精品成人久久网站| 成人特级毛片69免费观看| 岛国精品一区免费视频在线观看| 91免费福利视频| 巨胸喷奶水视频www网免费| 亚洲精品tv久久久久| 亚洲丁香色婷婷综合欲色啪| 亚洲日韩国产欧美一区二区三区 | 黄+色+性+人免费|