• 技术文章 >java >java基础

    java线程池创建方式

    小妮浅浅小妮浅浅2021-01-11 13:46:02原创2270

    在创建线程的使用,可以借用不同的Thread类解决,我们可以根据线程池的大小和其中的线程数量进行选择。这里给大家带来了四种方式:newCachedThreadPoolnewFixedThreadPoolnewScheduledThreadPoolnewSingleThreadExecutor。在接下来的内容中,我们会分别就这个方式的类型和代码示例带来分享。

    1. newCachedThreadPool

    创建一个线程池,如果线程池中的线程数量过大,它可以有效的回收多余的线程,如果线程数不足,那么它可以创建新的线程。

    public static void method() throws Exception {    ExecutorService executor = Executors.newCachedThreadPool();    for (int i = 0; i < 5; i++) {        final int index = i;        Thread.sleep(1000);        executor.execute(new Runnable() {            @Override            public void run() {                System.out.println(Thread.currentThread().getName() + "  " + index);            }        });    }}

    2. newFixedThreadPool

    创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的大小。线程池的大小一旦达到值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

    public static void method_01() throws InterruptedException {    ExecutorService executor = Executors.newFixedThreadPool(1);    for (int i = 0; i < 10; i++) {        Thread.sleep(1000);        final int index = i;        executor.execute(() -> {            try {                Thread.sleep(2 * 1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println(Thread.currentThread().getName() + "  " + index);        });    }    executor.shutdown();}

    3. newScheduledThreadPool

    创建一个大小的线程池。此线程池支持定时以及周期性执行任务的需求。

    public class TestScheduledThreadPoolExecutor {
     
        public static void main(String[] args) {
     
            ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
     
            exec.scheduleAtFixedRate(new Runnable() {//每隔一段时间就触发异常
     
                          @Override
     
                          publicvoid run() {
     
                               //throw new RuntimeException();
     
                               System.out.println("================");
     
                          }
     
                      }, 1000, 5000, TimeUnit.MILLISECONDS);
     
            exec.scheduleAtFixedRate(new Runnable() {//每隔一段时间打印系统时间,证明两者是互不影响的
     
                          @Override
     
                          publicvoid run() {
     
                               System.out.println(System.nanoTime());
     
                          }
     
                      }, 1000, 2000, TimeUnit.MILLISECONDS);
     
        }
     
    }

    4.newSingleThreadExecutor

    单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务。

    public class MyThread extends Thread {
     
        @Override
     
        public void run() {
     
            System.out.println(Thread.currentThread().getName() + "正在执行。。。");
     
        }
     
    }

    以上就是java线程池创建方式,在创建之前,需要我们根据线程池的需求进行判断。学会了它们的概念后,赶快动手试试创建自己需要的线程池吧。

    专题推荐:java线程池创建方式
    品易云
    上一篇:java线程池的运行流程 下一篇:java线程池异常的处理方法

    相关文章推荐

    • java executor框架的应用• java中ExecutorService有几种创建方法• java中关闭ExecutorService• ThreadPoolExecutor在java中创建线程池• java线程池的运行流程

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网