zoukankan      html  css  js  c++  java
  • 多线程——newFixedThreadPool线程池

    newFixedThreadPool线程池:

    理解:
      1.固定线程数的线程池。
      2.通过Executors中的静态方法创建:
          public static ExecutorService newFixedThreadPool(int nThreads)或者
          public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory)两种方式。
      3.返回的是ExecutorService对象线程池,例如:ExecutorService executorService = Executors.newFixedThreadPool(10)。
    例子:
    /**
     * 线程池,实现Runnable接口
     * @author Administrator
     *
     */
    public class ThreadPoolRunnable implements Runnable{
        public void run(){
            System.out.println(Thread.currentThread().getName()+"线程");
        }
    }
    /**
     * 实现Callable线程池
     * @author Administrator
     *
     */
    public class ThreadPoolCallable implements Callable<String>{
        @Override
        public String call() throws Exception {
            System.out.println(Thread.currentThread().getName()+"开始执行Callable接口.......");
            return "线程执行完毕!";
        }
    }
    //线程池测试类
    public class TestThreadPoolRunnable {
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            threadRunnable(5, 10);
            threadCallable(3, 10);
        }
    
        /**
         * 实现Runnable接口线程池
         * 
         * @param a
         *            创建线程数量
         * @param b
         *            线程池总数
         * @throws InterruptedException
         * @throws ExecutionException
         */
        public static void threadRunnable(int a, int b) throws InterruptedException, ExecutionException {
            // 创建线程池
            ExecutorService executorService = Executors.newFixedThreadPool(b);
            for (int i = 0; i < a; i++) {
                // 从线程池中调用线程
                executorService.submit(new ThreadPoolRunnable());
            }
        }
    
        /**
         * 实现Callable线程池
         * 
         * @param a
         *            创建线程数
         * @param b
         *            线程池总数
         * @throws InterruptedException
         * @throws ExecutionException
         */
        public static void threadCallable(int a, int b) throws InterruptedException, ExecutionException {
            ExecutorService executorService = Executors.newFixedThreadPool(b);
            for (int i = 0; i < a; i++) {
                Future<String> s = executorService.submit(new ThreadPoolCallable());
                System.out.println(s.get());
            }
        }
    }
    结果:
    pool-1-thread-1线程
    pool-1-thread-3线程
    pool-1-thread-2线程
    pool-1-thread-5线程
    pool-1-thread-4线程
    pool-2-thread-1开始执行Callable接口.......
    线程执行完毕!
    pool-2-thread-2开始执行Callable接口.......
    线程执行完毕!
    pool-2-thread-3开始执行Callable接口.......
    线程执行完毕!
  • 相关阅读:
    线性Softmax分类器实战
    线性SVM分类器实战
    今日心得:读书
    今日心得:正能量
    Excel导出POI
    mysql数据库操作命令
    git常用命令
    list对象 利用Map去除对象中字段的重复
    SpringMVC 利用POI的Excel导出
    利用ajax进行页面加载进行信息展示时,一直不提加载,转圈,不反回问题。
  • 原文地址:https://www.cnblogs.com/whx20100101/p/9862369.html
Copyright © 2011-2022 走看看