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

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

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

    ゞ沉默是金ゞ

    魚離不開水,但是沒有說不離開哪滴水.
    posts - 98,comments - 104,trackbacks - 0
    This article will discuss about Thread pool that uses single thread to execute tasks. From Java 5.0+ one can get such pool from Executors using following method –
    public static ExecutorService newSingleThreadExecutor()
        Creates an Executor that uses a single worker thread operating off an unbounded queue. (Note however that if this single thread terminates due to a failure during execution prior to shutdown, a new one will take its place if needed to execute subsequent tasks.) Tasks are guaranteed to execute sequentially, and no more than one task will be active at any given time. Unlike the otherwise equivalent newFixedThreadPool(1) the returned executor is guaranteed not to be reconfigurable to use additional threads.



    Example-
    Suppose we have 100 properties files in an application. We have one thread that can read properties file and return a map value.

    Pseudo code – READER THREAD

    Config Reader implements Callable<Map<String, String>
    try{
        // Get the file name in the constructor of thread
        // Check if File exists
        // Read the file and retrun the map object
    }catch(Exception e){
            //release all the resource
            //return null
    }

    Main THREAD-
            // Get a Single thread pool from Executors
     try{
        // Get the list of all properties file in the directory
        // Create a READER THREAD by passing the name of file
        // store the READER thread in the a list
        //release all the thread in one go and get the Map objects
    }catch(Exception e){
                    //release all the resources
                    // print the stack trace
    }finally{
            //shutdown the thread pool
    }

    package com.jovialjava.blog.threads;

    import java.io.File;
    import java.io.FileInputStream;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Properties;
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;

    class SingleReader implements Callable<Properties> {

        
    private String name = null;

        
    public SingleReader(String name) {
            
    this.name = name;
        }

        
    public Properties call() {
            
    try {
                File f 
    = new File(name);
                Properties prop 
    = new Properties();
                
    if (f.exists() && f.canRead() && f.isFile()) {
                    FileInputStream in 
    = new FileInputStream(f);
                    prop.load(in);
                    
    return prop;
                } 
    else {
                    System.err.println(
    "Please check about this file:[" + f.getAbsolutePath() + "]");
                    
    return null;
                }
            } 
    catch (Exception e) {
                e.printStackTrace();
                
    return null;
            }
        }
    }

    public class SingleThreadPoolExample {
        
    public static String directory = "config";
        
    private static ExecutorService executorPool = null;

        
    public static void main(String args) {
            
    try {
                File dir 
    = new File(directory);
                
    if (dir.isDirectory()) {
                    List
    <Callable<Properties>> fileList = new ArrayList<Callable<Properties>>();
                    String[] files 
    = dir.list();
                    
    /**
                     * Optimization - Single thread executor.
                     
    */
                    executorPool 
    = Executors.newSingleThreadExecutor();

                    
    for (String file : files) {
                        Callable
    <Properties> reader = new SingleReader(dir.getAbsolutePath() + File.separator + file);
                        fileList.add(reader);
                    }
                    List
    <Future<Properties>> results = executorPool.invokeAll(fileList);
                    
    /**
                     * Check how many success and how many failure
                     
    */
                    
    int success = 0, failure = 0;
                    
    for (Future<Properties> result : results) {
                        
    if (result.get() == null) {
                            failure
    ++;
                        } 
    else {
                            success
    ++;
                        }
                    }
                    System.out.println(
    "Total number of files [" + fileList.size() + "]");
                    System.out.println(
    "Success Count [" + success + "]");
                    System.out.println(
    "Failure Count [" + failure + "]");
                } 
    else {
                    
    throw new IllegalArgumentException("There is no such directory name -" + directory);
                }
            } 
    catch (Exception e) {
                e.printStackTrace();
            } 
    finally {
                
    if (executorPool != null) {
                    executorPool.shutdown();
                }
            }
        }

    }
    posted on 2012-08-06 10:49 ゞ沉默是金ゞ 閱讀(1002) 評論(1)  編輯  收藏 所屬分類: Java SE

    FeedBack:
    # re: Part 12: java.util.concurrent : SingleThreadPool Example
    2012-08-06 16:25 | NotNolyJava
    覺得這個例子用singleThreadExecutor有點牽強,singleThreadExecutor應該是用來人為的將并行的任務竄行化:一個文件100個任務想讀寫,這個時候將這些任務用singleThreadExecutor竄行話避免讀寫錯亂,但是每個任務的提交不受其他任務的影響,不過樓主用英語寫博客不錯啊,好想把英語學好!  回復  更多評論
      
    主站蜘蛛池模板: 99久久免费国产特黄| 久久亚洲精品国产亚洲老地址| 特级毛片全部免费播放| 日韩视频免费一区二区三区| 中文文字幕文字幕亚洲色| 色se01短视频永久免费| 亚洲一区二区免费视频| 成年男女免费视频网站| 亚洲区日韩精品中文字幕| 四虎影永久在线高清免费| 黄色毛片免费在线观看| 亚洲日韩人妻第一页| 99免费在线视频| 久久综合亚洲色一区二区三区| 最近中文字幕高清免费中文字幕mv | 看亚洲a级一级毛片| 国产zzjjzzjj视频全免费| 日韩精品无码免费视频| 亚洲中文字幕无码久久综合网 | 国产在线精品免费aaa片| 亚洲国产精品久久久久婷婷软件 | 亚洲 欧洲 视频 伦小说| 国产精品久久香蕉免费播放| 免费精品视频在线| 亚洲国产精品无码成人片久久| 免费A级毛片无码视频| 亚洲中文字幕乱码一区| 亚洲日韩VA无码中文字幕| 午夜不卡久久精品无码免费| 学生妹亚洲一区二区| 亚洲乱码中文字幕手机在线| 国产一区二区三区免费| 亚洲免费福利在线视频| 亚洲精品综合久久| 在线看片免费人成视久网| 国产精品亚洲专区在线观看| 精品国产亚洲男女在线线电影| 95免费观看体验区视频| 美女黄频a美女大全免费皮| 亚洲欧洲第一a在线观看| 免费一看一级毛片全播放|