Java线程池

有没有一种方法使得线程可以复用(反复使用),就是执行完一个任务,并不被销毁,而是可以继续执行其它的任务?

在Java中可以通过线程池来达到这样的效果

线程池:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源

线程池:容器–>集合(ArrayList、Hashset、Linkedlist hashmap)

Java.util.concurrent.Executors:线程池的工厂类,用来生成线程池

Executors类中的静态方法:

  static ExecutorService newFixedThreadPool(int nThreads)创建一个可重用固定线程数的线程池参数:int nThreads:创建线程池中包含的线程数量返回值:ExecutorService接口:返回的是ExecutorService接口的实现类对象,我们可以使ExecutorService接口接收(面向接口编程)java.util.concurrent.ExecutorService:线程池接口用来从线程池中获取线程,调用start方法,执行线程任务submit(Runnable task) 提交一个Runnable任务用于执行关闭/销毁线程池的方法void shutdown()

线程池的使用步骤:

1.使用线程池的工厂类Executors里边提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池

2.创建一个类,实现Runnable接口,重写run方法,设置线程任务

3.调用ExecutorService中的方法submit(),传递线程任务(实现类),开启线程,执行run方法

4.调用ExecutorService中的方法shutdown()销毁线程池(不建议执行)

 public static void main(String[] args) {//1.使用线程池的工厂类Executors里边提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池ExecutorService es= Executors.newFixedThreadPool(2);//3.调用ExecutorService中的方法submit(),传递线程任务(实现类),开启线程,执行run方法es.submit(new Runnableimpl());//pool-1-thread-1新线程//线程池会一直开启,使用完了线程,会自动把线程归还给线程池,线程可以继续使用es.submit(new Runnableimpl());//pool-1-thread-2新线程//4.调用ExecutorService中的方法shutdown()销毁线程池(不建议执行)es.shutdown();es.submit(new Runnableimpl());//线程池已销毁,抛异常,就不能获取线程了}
//2.创建一个类,实现Runnable接口,重写run方法,设置线程任务
public class Runnableimpl implements Runnable{@Overridepublic void run(){System.out.println(Thread.currentThread().getName()+"新线程");}
}

Lambda表达式

函数式的编程思想:

面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法–强调做什么,而不是以什么形式做

面向对象的思想:

做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情

函数式编程思想:

只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程

Thread类的匿名内部类用法

1.Thread类需要Runnable接口作为参数,其中的抽象run方法是用来指定线程任务内容的核心
2.为了指定run的方法体,不得不需要Runnable接口的实现类
3.为了省去定义一个Runnableimpl实现类的麻烦,不得不使用匿名内部类
4.必须覆盖重写抽象run方法,所以方法名称、方法参数、方法返回值不得不再写一遍,且不能写错
5.而实际上,似乎只有方法体才是关键所在

 public static void main(String[] args){Runnableimpl run=new  Runnableimpl();Thread t=new Thread(run);t.start();//简化代码,使用匿名内部类,实现多线程程序Runnable r = new Runnable(){@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"新线程");}};new Thread(r).start();//简化代码new Thread(new Runnable(){@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"新线程");}}).start();//使用Lambda表达式,实现多线程new Thread(()->{System.out.println(Thread.currentThread().getName()+"新线程");}).start();}
public class Runnableimpl implements Runnable{@Overridepublic void run(){System.out.println(Thread.currentThread().getName()+"新线程");}
}

Java线程池与Lambda表达式相关推荐

  1. day07【线程池、Lambda表达式】(1)

    day07[线程池.Lambda表达式] 主要内容 等待与唤醒案例 线程池 Lambda表达式 教学目标 -[ ] 能够理解线程通信概念 -[ ] 能够理解等待唤醒机制 -[ ] 能够描述Java中线 ...

  2. java day18【线程池、Lambda表达式】

    第一章 等待唤醒机制 1.1 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B ...

  3. 02java进阶03-异常、线程、同步、线程池、Lambda表达式、File类、递归

    目录 一.异常 二.异常的处理 三.自定义异常 四.多线程 五.线程.同步 5.1.线程 5.2同步 5.3线程安全 5.4线程状态 六.等待唤醒机制 6.1 线程间通信 6.2 等待唤醒机制 6.3 ...

  4. 多线程、线程池以及Lambda表达式的总结笔记分享

    文章目录 1. 多线程技术 1.1 线程与进程 1.2 守护线程和用户线程 1.3 线程的六种状态 1.4 线程的调度 1.5 同步与异步 1.6 并发与并行 1.7 Thread类 1.7.1 Th ...

  5. 【Java】线程池、Lambda表达式

  6. java线程池延期执行一次_Java使用者的延期执行

    java线程池延期执行一次 在前面的博客文章(" 延迟执行Java的供应商 "),我引用礁HORSTMANN的陈述书中' 的Java SE8为真的很急关于lambda表达式','所 ...

  7. Java 函数式编程和 lambda 表达式

    为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...

  8. JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式

    这些天看见另一本好书<给大忙人看的Java SE 8>,其中的新特性 StreamAPI 和 lambda表达式 是之前jdk没有提供的新特性,也是jdk8 重要的更新内容,我会总结一下它 ...

  9. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 引入Lambda Java 是一流的面向对象语言,除了部分简单数据类型,Java 中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象.在 Java ...

最新文章

  1. SVN 版本服务器搭配全过程详解(含服务端、客户端)
  2. 如何从社区的patchwork下载补丁并应用到当前内核源码?
  3. Scrapy框架----- Spiders
  4. linux kdb内核调试器,使用KDB调试工具
  5. CAN总线技术 | 物理层01 - CAN信号电平
  6. python爬虫学习:电商数据分析
  7. ASP网页中 制作连续无缝滚动文字
  8. 【TLSR825x】windows下开发环境搭建,固件烧录方法
  9. 网站服务器记录攻击日志ctf,通过网站日志分析sql注入攻击的痕迹
  10. Ubuntu20.04 设置虚拟内存
  11. jQuery 利用 :even 和 :odd偶数奇数 进行变色
  12. 大数据教学整套视频及源码
  13. Java并发25 ThreadFactory使用的必要性
  14. torch.contiguous()方法
  15. tkinter-button详解
  16. 开一家像嘀嘀那样的公司,需要办理哪些手续和多少预算?
  17. C++:建立Cylinder类,有三个double型私有数据成员:半径、高和体积,构造函数传递两个值:半径和高,计算体积。成员函数showVolume()用来显示每个对象的体积。
  18. 阿里云服务器ECS利用反向代理FRP内网穿透
  19. 资料分享|常用AD元件库及封装库
  20. 欧尼酱讲JVM(09)——虚拟机栈-变量槽slot

热门文章

  1. c语言20s计数器,供应电子计时器、JC20S、JY20S、计数控制器、计米器
  2. 雷军又找到了一个蓝海:90分如何成为天猫双11预售最大黑马
  3. 伦敦 quant_伦敦统一用户组(LUUG)见面v1.0
  4. Objective-C学习篇03—继承
  5. 如何快速搭建好看的个人博客(完整配置与源码)
  6. 发售近一周 华为nova2s口碑惊人
  7. Object.entries()方法的使用和实现
  8. oracle异地容灾备份 英文6,异地容灾备份的方案.doc
  9. 炸!亚马逊将解散与印度亿万富翁的合资企业;eBay推迟公布2021年Q2财报;TikTok在英国进行测试电商功能…|洞悉跨境
  10. 【信息安全】屁股决定脑袋的COSO内控框架,一篇对COSO的趣评 [转贴]