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接口.......
    线程执行完毕!
  • 相关阅读:
    applicationContext.xml 文件头报错Referenced file contains errors
    oracle与mysql创建表时的区别
    Java 8 Stream
    Java 8 默认方法
    Java 8 函数式接口
    java 链表
    不完整的类型问题解决
    VScode 目录影藏某些文件不显示
    小姨多鹤 电视剧有感
    matlab 简单显示多边形和线条和点
  • 原文地址:https://www.cnblogs.com/whx20100101/p/9862369.html
Copyright © 2011-2022 走看看