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

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

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

    posts - 9, comments - 4, trackbacks - 0, articles - 21

    JDK5 線程池2

    Posted on 2008-01-18 15:18 一步一步努力向上爬 閱讀(297) 評論(0)  編輯  收藏 所屬分類: J2SE學習
     昨天開始研究java的多線程包java.util.concurrent,根據自己的理解實現了一個消息隊列異步調用(200行代碼左右)。拿出來與大家分享我的勞動成果。
      希望大家多提意見。指出哪里寫的不好,以后加以改正。

    ThreadPoolManager類:負責管理線程池,調用輪詢的線程來訪問字符串緩沖區的內容,維護緩沖區,當線程池溢出時拋出的Runnable任務被加入到字符緩沖區。
    public class ThreadPoolManager
    {
        private static ThreadPoolManager tpm = new ThreadPoolManager();

        // 線程池維護線程的最少數量
        private final static int CORE_POOL_SIZE = 4;

        // 線程池維護線程的最大數量
        private final static int MAX_POOL_SIZE = 10;

        // 線程池維護線程所允許的空閑時間
        private final static int KEEP_ALIVE_TIME = 0;

        // 線程池所使用的緩沖隊列大小
        private final static int WORK_QUEUE_SIZE = 10;

        // 消息緩沖隊列
        Queue<String> msgQueue = new LinkedList<String>();

        // 訪問消息緩存的調度線程
        final Runnable accessBufferThread = new Runnable()
        {
            public void run()
            {
                // 查看是否有待定請求,如果有,則創建一個新的AccessDBThread,并添加到線程池中
                if( hasMoreAcquire() )
                {
                    String msg = ( String ) msgQueue.poll();
                    Runnable task = new AccessDBThread( msg );
                    threadPool.execute( task );
                }
            }
        };

        final RejectedExecutionHandler handler = new RejectedExecutionHandler()
        {
            public void rejectedExecution( Runnable r, ThreadPoolExecutor executor )
            {
                System.out.println(((AccessDBThread )r).getMsg()+"消息放入隊列中重新等待執行");
                msgQueue.offer((( AccessDBThread ) r ).getMsg() );
            }
        };

        // 管理數據庫訪問的線程池
        final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
                CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS,
                new ArrayBlockingQueue( WORK_QUEUE_SIZE ), this.handler );

        // 調度線程池
        final ScheduledExecutorService scheduler = Executors
                .newScheduledThreadPool( 1 );

        final ScheduledFuture taskHandler = scheduler.scheduleAtFixedRate(
                accessBufferThread, 0, 1, TimeUnit.SECONDS );

        public static ThreadPoolManager newInstance()
        {
            return tpm;
        }

        private ThreadPoolManager(){}

        private boolean hasMoreAcquire()
        {
            return !msgQueue.isEmpty();
        }

        public void addLogMsg( String msg )
        {
            Runnable task = new AccessDBThread( msg );
            threadPool.execute( task );
        }
    }

    public class AccessDBThread implements Runnable
    {
        private String msg;
        
        public String getMsg()
        {
            return msg;
        }

        public void setMsg( String msg )
        {
            this.msg = msg;
        }
        
        public AccessDBThread(){
            super();
        }
        
        public AccessDBThread(String msg){
            this.msg = msg;
        }

        public void run()
        {
            // 向數據庫中添加Msg變量值
            System.out.println("Added the message: "+msg+" into the Database");
        }

    }

    public class TestDriver
    {
        ThreadPoolManager tpm = ThreadPoolManager.newInstance();

        public void sendMsg( String msg )
        {
            tpm.addLogMsg( msg + "記錄一條日志 " );
        }

        public static void main( String[] args )
        {
            for( int i = 0; i < 100; i++ )
            {
                new TestDriver().sendMsg( Integer.toString( i ) );
            }
        }
    }
    主站蜘蛛池模板: 99久久国产精品免费一区二区| 亚洲欧好州第一的日产suv| 污视频网站在线免费看| 午夜视频免费成人| 亚洲一久久久久久久久| A级毛片内射免费视频| 亚洲一区二区三区乱码在线欧洲| 久久WWW免费人成一看片| 亚洲视频免费一区| 99在线免费观看视频| 亚洲日韩乱码中文无码蜜桃| 日韩精品无码专区免费播放| 亚洲精品福利视频| 国产又大又粗又长免费视频| 亚洲毛片免费视频| 成人毛片免费观看视频大全| 亚洲精品无码mⅴ在线观看| 免费一级国产生活片| 日韩在线视频免费| 国产V亚洲V天堂A无码| 日本免费人成视频在线观看| 亚洲人成在线免费观看| 最新中文字幕电影免费观看| 国产区图片区小说区亚洲区| 国产亚洲自拍一区| 1a级毛片免费观看| 亚洲精品理论电影在线观看| 亚洲国产人成中文幕一级二级| sss在线观看免费高清| 水蜜桃亚洲一二三四在线| 丁香花免费高清视频完整版| 亚洲av成人无码网站… | 天天摸夜夜摸成人免费视频| 国产亚洲视频在线观看| 国产亚洲精品观看91在线| 100部毛片免费全部播放完整| 亚洲精品色播一区二区| 亚洲AV无码不卡在线播放| 久久精品a一国产成人免费网站| 污污免费在线观看| 亚洲一区无码中文字幕乱码|