<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
    主站蜘蛛池模板: 免费大片黄在线观看| 久久精品中文字幕免费| 国产AV无码专区亚洲Av| 精品无码AV无码免费专区| 亚洲sm另类一区二区三区| 亚洲啪啪综合AV一区| 猫咪社区免费资源在线观看 | 亚洲高清在线视频| 久久WWW免费人成人片| 久久性生大片免费观看性| 亚洲综合av一区二区三区不卡| 亚洲?V无码乱码国产精品| 69视频在线观看免费| 美女被爆羞羞网站免费| 亚洲日本香蕉视频| 久久精品国产亚洲Aⅴ香蕉 | 亚洲av成人无码久久精品| 蜜臀91精品国产免费观看| 无码国产精品一区二区免费vr| 亚洲精品无码中文久久字幕| 亚洲一区综合在线播放| 亚洲AⅤ无码一区二区三区在线| 91香蕉成人免费网站| 中文字幕在线视频免费| 亚洲av无码专区在线观看亚| 亚洲2022国产成人精品无码区 | 岛国大片免费在线观看| 免费在线看黄网站| www成人免费视频| 亚洲第一se情网站| 亚洲综合精品成人| 亚洲沟沟美女亚洲沟沟| 亚洲av永久无码精品网站| 亚洲精品97久久中文字幕无码| 在线a毛片免费视频观看| 91黑丝国产线观看免费| 一级毛片全部免费播放| 免费人成激情视频在线观看冫| h片在线观看免费| 免费观看又污又黄在线观看| 亚洲精品乱码久久久久久蜜桃图片|