课堂笔记之自定义线程池

来源:互联网 发布:c语言入门经典 编辑:程序博客网 时间:2024/05/01 03:17

    以下文字内容,可能有误,理解不够透彻

线程池在加载任务时

任务先一次加载到线程池中,如果扩容到最大线程数还不够用,就会放入阻塞队列中取等待,如果队列的长度不够放,就会爆出错误

核心线程,是系统会优先使用的,如果优先的不够用才会扩容到够用为止

并且在核心线程第一次开始启动加载任务时,会顺序排队执行,一个完成,下一个才能开始。然后再随机加载甚至扩容

public class ThreadPoolDemo03 {

    
    private static final ThreadFactory sThreadFactory = new ThreadFactory() {
        private final AtomicInteger mCount = new AtomicInteger(1);

        public Thread newThread(Runnable r) {
            return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
        }
    };
    
    
    public static void main(String[] args) {
        BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(20);
        
        Executor pool = new ThreadPoolExecutor(5, 20, 1, TimeUnit.SECONDS,workQueue,sThreadFactory);
//         new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory)

        for(int i=0; i<100; i++)
        pool.execute(new Runnable() {

            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                String name = Thread.currentThread().getName();
                System.out.println(name+ "--->");
            }
        });

        
    }
}
0 0
原创粉丝点击