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

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

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

    ゞ沉默是金ゞ

    魚離不開(kāi)水,但是沒(méi)有說(shuō)不離開(kāi)哪滴水.
    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 ゞ沉默是金ゞ 閱讀(1581) 評(píng)論(0)  編輯  收藏 所屬分類: Java SE
    主站蜘蛛池模板: 色播在线永久免费视频| 亚洲国产精品午夜电影| 啦啦啦www免费视频| 国产免费AV片在线观看| 黄页网址在线免费观看| 亚洲日本va在线观看| 亚洲色图在线观看| 亚洲精品制服丝袜四区| 亚洲精品一级无码鲁丝片| 日韩在线视频免费看| 永久免费av无码不卡在线观看| 免费高清国产视频| 99精品视频在线观看免费| 一级毛片免费不卡| 国产精品亚洲va在线观看| 亚洲精品456人成在线| 亚洲成人免费网站| 久久精品蜜芽亚洲国产AV| 日韩亚洲一区二区三区| 最新精品亚洲成a人在线观看| 国产美女无遮挡免费网站| 毛片a级三毛片免费播放| 亚洲免费黄色网址| 在线看无码的免费网站| 久久成人免费播放网站| 美女在线视频观看影院免费天天看| yellow免费网站| caoporn国产精品免费| 污污污视频在线免费观看| 特级aaaaaaaaa毛片免费视频| 国产精品久久久久久亚洲影视| 亚洲精品亚洲人成在线| 亚洲色丰满少妇高潮18p| 亚洲乱理伦片在线观看中字| 亚洲日韩一区二区一无码| 中文字幕亚洲精品无码| 亚洲国产欧美一区二区三区| 亚洲成av人片天堂网无码】| 亚洲av成人片在线观看| 免费人人潮人人爽一区二区| 免费精品视频在线|