Java基础之线程池4月打卡day12

举报
java厂长 发表于 2022/04/12 22:19:49 2022/04/12
【摘要】 Java基础之线程池4月打卡day12关于作者作者介绍🍓 博客主页:作者主页🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻。1、线程池线程池就是多个线程封装在一起操作。1.1 线程池概念在生活中经常遇见,今天开发一个项目需要...

Java基础之线程池4月打卡day12

关于作者

  • 作者介绍


🍓 博客主页:作者主页

🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。

🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻。

1、线程池

线程池就是多个线程封装在一起操作。

1.1 线程池概念

在生活中经常遇见,今天开发一个项目需要20个人一起开发

  • 这个活很大,有多少人要多少人

  • 这个活很大,但是要求10个人

  • 这个活很大,但只要求1个人做

image-20210817100145027

追加一个并发访问的程序报:java.util.concurrent,对于此线程池的操作的核心类和接口就定义在之中。这里面有两个核心的接口:

  1. 普通的执行线程池定义:Interface ExecutorService

  2. 调度线程池:Interface ScheduledExecutorService

如果要进行线程池的创建一般使用Class Executors这个类

  • 创建无法小限制的线程池:public static ExecutorService newCachedThreadPool()

  • 创建固定大小的线程池:public static ExecutorService newFixedThreadPool(int nThreads)

  • 单线程池:public static ExecutorService newSingleThreadExecutor()

  • 创建定时调度池:public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)

1.2 线程池的实现

创建无限大小的线程池

package com.day13.demo;
​
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
​
public class PoolDemo1 {
​
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        //创建了一个线程池的模型,但是后面没有线程
        ExecutorService executorService = Executors.newCachedThreadPool();
        for (int i = 0; i < 10; i++) {
            int index = i;
            Thread.sleep(200);
            executorService.submit(()-> {
                System.out.println(Thread.currentThread().getName() + ",i = " + index);
            });
        }
        executorService.shutdown();
    }
}

创建固定大小的线程池

package com.day13.demo;
​
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
​
public class PoolDemo1 {
​
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        //创建了一个线程池的模型,但是后面没有线程
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        for (int i = 0; i < 10; i++) {
            int index = i;
            Thread.sleep(200);
            executorService.submit(()-> {
                System.out.println(Thread.currentThread().getName() + ",i = " + index);
            });
        }
        executorService.shutdown();
    }
}

创建我们的单线程线程池

package com.day13.demo;
​
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
​
public class PoolDemo1 {
​
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        //创建了一个线程池的模型,但是后面没有线程
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        for (int i = 0; i < 10; i++) {
            int index = i;
            executorService.submit(()-> {
                System.out.println(Thread.currentThread().getName() + ",i = " + index);
            });
        }
        executorService.shutdown();
    }
}

定时调度池

package com.day13.demo;
​
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
​
public class PoolDemo1 {
​
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        //创建了一哥具备有三个线程大小的定时调度池
        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
        for (int i = 0; i < 10; i++) {
            //Thread.sleep(200);
            int index = i;
            executorService.scheduleAtFixedRate(new Runnable(){
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                        System.out.println(Thread.currentThread().getName() + ",i = " + index);
                }
                
            }, 3, 2, TimeUnit.SECONDS);//使用的是一个秒的单位,表示3秒后开始执行,而后每过2秒执行一次
        }
    }
}

线程池给我们开发者带来唯一好处的就是允许多个线程按照组的模式进行程序的处理,这样在一个业务逻辑非常复杂的情况下,性能就会得到很好的提升。

# 后语

厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。

对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。