<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竄行話避免讀寫錯亂,但是每個任務的提交不受其他任務的影響,不過樓主用英語寫博客不錯啊,好想把英語學好!  回復  更多評論
      
    主站蜘蛛池模板: 内射无码专区久久亚洲| 毛片免费在线观看网站| 亚洲精品你懂的在线观看| 免费夜色污私人影院网站电影| 在线成人a毛片免费播放| 亚洲色大成网站WWW国产| 亚洲精品动漫人成3d在线| 曰皮全部过程视频免费国产30分钟| 亚洲天堂视频在线观看| 岛国岛国免费V片在线观看| 91麻豆国产自产在线观看亚洲| 成人免费a级毛片| 国产日韩精品无码区免费专区国产 | 亚洲丝袜美腿视频| 久久成人国产精品免费软件| 亚洲国产精品综合久久久| a级毛片无码免费真人| 亚洲AV无码成人网站在线观看| 国产伦精品一区二区三区免费下载| 黄网站在线播放视频免费观看 | 亚洲精品乱码久久久久久按摩 | 免费下载成人电影| 亚洲精品V天堂中文字幕| 免费人成网站在线播放| 在线观看人成视频免费无遮挡| 久久久久亚洲精品美女| 91在线视频免费91| 无码免费又爽又高潮喷水的视频 | 亚洲an日韩专区在线| 亚洲av高清在线观看一区二区| 99精品免费视频| 国产精品亚洲片在线va| 亚洲AV无码不卡在线观看下载| 国产精品免费高清在线观看| 国产成人精品日本亚洲专| 亚洲国产免费综合| 中文字幕免费观看| 国产精品亚洲色图| 亚洲综合免费视频| 亚洲国产精品一区二区九九| 2021在线观看视频精品免费|