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

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

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

    posts - 101,  comments - 29,  trackbacks - 0

    優化鎖,之前的鎖是采用一個static的Object實現的,這要就會有一個問題,如果我創建了多個Executer,那么所有Job都會持有一把鎖,既影響性能,也容易出現死鎖的情況。所以,改成每個Executer持有一把鎖。

    Executer代碼如下:

     

    Java代碼  收藏代碼
    1. public class Executer {  
    2.     //計算已經派發的任務數(條件謂詞)  
    3.     public static int THREAD_COUNT = 0;  
    4.     //存儲任務的執行結果  
    5.     private List<Future<Object>> futres = new ArrayList<Future<Object>>();   
    6.     //條件隊列鎖  
    7.     public final Object lock = new Object();  
    8.     //線程池  
    9.     private ExecutorService pool = null;  
    10.     public Executer() {  
    11.         this(1);  
    12.     }  
    13.     public Executer(int threadPoolSize) {  
    14.         pool = Executors.newFixedThreadPool(threadPoolSize);  
    15.     }  
    16.     /** 
    17.      * 任務派發 
    18.      * @param job 
    19.      */  
    20.     public void fork(Job job){  
    21.         //設置同步鎖  
    22.         job.setLock(lock);  
    23.         //將任務派發給線程池去執行  
    24.         futres.add(pool.submit(job));  
    25.         //增加線程數  
    26.         synchronized (lock) {  
    27.             THREAD_COUNT++;  
    28.         }  
    29.     }  
    30.     /** 
    31.      * 統計任務結果 
    32.      */  
    33.     public List<Object> join(){  
    34.         synchronized (lock) {  
    35.             while(THREAD_COUNT > 0){//檢查線程數,如果為0,則表示所有任務處理完成  
    36.                 System.out.println("threadCount: "+THREAD_COUNT);  
    37.                 try {  
    38.                     lock.wait();//如果任務沒有全部完成,則掛起。等待完成的任務給予通知  
    39.                 } catch (InterruptedException e) {  
    40.                     e.printStackTrace();  
    41.                 }  
    42.             }  
    43.         }  
    44.         List<Object> list = new ArrayList<Object>();  
    45.         //取出每個任務的處理結果,匯總后返回  
    46.         for (Future<Object> future : futres) {  
    47.             try {  
    48.                 Object result = future.get();//因為任務都已經完成,這里直接get  
    49.                 list.add(result);  
    50.             } catch (Exception e) {  
    51.                 e.printStackTrace();  
    52.             }   
    53.         }  
    54.         return list;  
    55.     }  
    56. }  

     Job類:

     

    Java代碼  收藏代碼
    1. public abstract class Job implements Callable<Object> {  
    2.   
    3.     //鎖  
    4.     private Object lock = null;  
    5.   
    6.     void setLock(Object lock) {  
    7.         this.lock = lock;  
    8.     }  
    9.   
    10.     @Override  
    11.     public Object call() throws Exception {  
    12.         Object result = this.execute();//執行子類具體任務  
    13.         synchronized (lock) {  
    14.             //處理完業務后,任務結束,遞減線程數,同時喚醒主線程  
    15.             Executer.THREAD_COUNT--;  
    16.             lock.notifyAll();  
    17.         }  
    18.         return result;  
    19.     }  
    20.     /** 
    21.      * 業務處理函數 
    22.      */  
    23.     public abstract Object execute();  
    24.       
    25. }  

     測試結果:

     

    Java代碼  收藏代碼
    1. threadCount: 10  
    2. running thread id = 8  
    3. running thread id = 10  
    4. running thread id = 9  
    5. running thread id = 12  
    6. running thread id = 11  
    7. threadCount: 8  
    8. threadCount: 7  
    9. threadCount: 6  
    10. threadCount: 5  
    11. running thread id = 12  
    12. running thread id = 8  
    13. running thread id = 11  
    14. threadCount: 2  
    15. running thread id = 10  
    16. threadCount: 1  
    17. running thread id = 9  
    18. ResultSize: 10  
    19. time: 2001  

     OK!

    這樣每個Executer就可以使用自己的lock,而相互不受同步的影響

    posted on 2012-07-15 01:21 mixer-a 閱讀(1114) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲综合激情九月婷婷| 国产真实伦在线视频免费观看| 亚洲国产午夜精品理论片| 巨胸喷奶水www永久免费| 老外毛片免费视频播放| free哆拍拍免费永久视频| 无码专区一va亚洲v专区在线 | 久操视频免费观看| 久久久久免费看黄A片APP| 免费人妻无码不卡中文字幕18禁| 亚洲成av人片天堂网| 中国一级全黄的免费观看| 亚洲国产AV无码专区亚洲AV| 国内精品免费视频精选在线观看 | 免费无码看av的网站| 久久亚洲中文字幕无码| 91在线免费观看| 亚洲国产精品一区二区久久hs| 国内少妇偷人精品视频免费| 久久精品九九亚洲精品| 无码少妇一区二区浪潮免费| 亚洲日韩av无码中文| a毛片免费观看完整| 亚洲国产精品久久久久婷婷老年| 亚洲乱码国产乱码精华| 国产一级淫片免费播放电影| 久青草国产免费观看| 亚洲AV永久无码区成人网站| 日本h在线精品免费观看| 综合亚洲伊人午夜网 | 日本亚洲色大成网站www久久| 久久精品国产免费一区| 亚洲欧洲自拍拍偷午夜色| 日韩视频在线免费| 韩日电影在线播放免费版| 亚洲精品在线免费看| 又色又污又黄无遮挡的免费视| 两性色午夜视频免费播放| 亚洲成aⅴ人在线观看| 免费a级毛片大学生免费观看| 精品一区二区三区免费|