<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 can reuse previously constructed threads when they are available. From Java 5.0+ one can get such pool from Executors using following method –
    public static ExecutorService newCachedThreadPool()
    Creates a thread pool that creates new threads as needed, but will reuse previously constructed threads when they are available. These pools will typically improve the performance of programs that execute many short-lived asynchronous tasks. Calls to execute will reuse previously constructed threads if available. If no existing thread is available, a new thread will be created and added to the pool. Threads that have not been used for sixty seconds are terminated and removed from the cache. Thus, a pool that remains idle for long enough will not consume any resources. Note that pools with similar properties but different details (for example, timeout parameters) may be created using ThreadPoolExecutor constructors.


    Example-
    Suppose we have 100 properties files in an application. We have one thread that can read properties file and return a map value. We want to optimize the time to read all 100 properties file by using concurrent reading. Here optimize means – we need a perfect balance between CPU Utilization and total time consumed by reading process.

    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 Cached 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 CachedReader implements Callable<Properties> {

        
    private String name = null;

        
    public CachedReader(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 CachedThreadPoolExample {
        
    public static String directory = "config";
        
    private static ExecutorService executorPool = null;
        
    private static int MAX_THREADS = 20;

        
    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 - Reuse the the threads.
                     
    */
                    executorPool 
    = Executors.newCachedThreadPool();

                    
    for (String file : files) {
                        Callable
    <Properties> reader = new CachedReader(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:47 ゞ沉默是金ゞ 閱讀(1570) 評論(0)  編輯  收藏 所屬分類: Java SE
    主站蜘蛛池模板: 色婷婷综合缴情综免费观看| 亚洲一区二区三区免费观看| 亚洲国产成a人v在线| 爽爽爽爽爽爽爽成人免费观看| 亚洲福利秒拍一区二区| 亚洲精品视频在线观看你懂的| 91在线视频免费91| 久久久久国产免费| 亚洲黄片手机免费观看| 亚洲av永久无码一区二区三区| 亚洲电影免费在线观看| 国产亚洲色婷婷久久99精品| 国产精品免费电影| 日本免费人成黄页在线观看视频| 91av免费观看| 四虎在线免费视频| 日本zzzzwww大片免费| 国产免费女女脚奴视频网| 日本免费一区二区三区| 在线a免费观看最新网站| 无码免费一区二区三区免费播放| 国产午夜精品久久久久免费视| 国产免费网站看v片在线| 少妇人妻偷人精品免费视频| 国色精品va在线观看免费视频| 无人在线观看免费高清| 在免费jizzjizz在线播| 最好免费观看韩国+日本 | 亚洲日韩中文无码久久| 久热综合在线亚洲精品| 国内精品久久久久影院亚洲| 亚洲日韩在线中文字幕综合 | 小草在线看片免费人成视久网| 国产成人精品免费视频大| 国产网站在线免费观看| 亚洲国产香蕉人人爽成AV片久久| 亚洲AV综合色一区二区三区| 亚洲理论在线观看| 国产精品小视频免费无限app| 性xxxxx免费视频播放| 久久久久亚洲Av无码专|