Java线程池与Lambda表达式
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表达式相关推荐
- day07【线程池、Lambda表达式】(1)
day07[线程池.Lambda表达式] 主要内容 等待与唤醒案例 线程池 Lambda表达式 教学目标 -[ ] 能够理解线程通信概念 -[ ] 能够理解等待唤醒机制 -[ ] 能够描述Java中线 ...
- java day18【线程池、Lambda表达式】
第一章 等待唤醒机制 1.1 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B ...
- 02java进阶03-异常、线程、同步、线程池、Lambda表达式、File类、递归
目录 一.异常 二.异常的处理 三.自定义异常 四.多线程 五.线程.同步 5.1.线程 5.2同步 5.3线程安全 5.4线程状态 六.等待唤醒机制 6.1 线程间通信 6.2 等待唤醒机制 6.3 ...
- 多线程、线程池以及Lambda表达式的总结笔记分享
文章目录 1. 多线程技术 1.1 线程与进程 1.2 守护线程和用户线程 1.3 线程的六种状态 1.4 线程的调度 1.5 同步与异步 1.6 并发与并行 1.7 Thread类 1.7.1 Th ...
- 【Java】线程池、Lambda表达式
- java线程池延期执行一次_Java使用者的延期执行
java线程池延期执行一次 在前面的博客文章(" 延迟执行Java的供应商 "),我引用礁HORSTMANN的陈述书中' 的Java SE8为真的很急关于lambda表达式','所 ...
- Java 函数式编程和 lambda 表达式
为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...
- JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式
这些天看见另一本好书<给大忙人看的Java SE 8>,其中的新特性 StreamAPI 和 lambda表达式 是之前jdk没有提供的新特性,也是jdk8 重要的更新内容,我会总结一下它 ...
- Java基础教程:Lambda表达式
Java基础教程:Lambda表达式 引入Lambda Java 是一流的面向对象语言,除了部分简单数据类型,Java 中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象.在 Java ...
最新文章
- SVN 版本服务器搭配全过程详解(含服务端、客户端)
- 如何从社区的patchwork下载补丁并应用到当前内核源码?
- Scrapy框架----- Spiders
- linux kdb内核调试器,使用KDB调试工具
- CAN总线技术 | 物理层01 - CAN信号电平
- python爬虫学习:电商数据分析
- ASP网页中 制作连续无缝滚动文字
- 【TLSR825x】windows下开发环境搭建,固件烧录方法
- 网站服务器记录攻击日志ctf,通过网站日志分析sql注入攻击的痕迹
- Ubuntu20.04 设置虚拟内存
- jQuery 利用 :even 和 :odd偶数奇数 进行变色
- 大数据教学整套视频及源码
- Java并发25 ThreadFactory使用的必要性
- torch.contiguous()方法
- tkinter-button详解
- 开一家像嘀嘀那样的公司,需要办理哪些手续和多少预算?
- C++:建立Cylinder类,有三个double型私有数据成员:半径、高和体积,构造函数传递两个值:半径和高,计算体积。成员函数showVolume()用来显示每个对象的体积。
- 阿里云服务器ECS利用反向代理FRP内网穿透
- 资料分享|常用AD元件库及封装库
- 欧尼酱讲JVM(09)——虚拟机栈-变量槽slot
热门文章
- c语言20s计数器,供应电子计时器、JC20S、JY20S、计数控制器、计米器
- 雷军又找到了一个蓝海:90分如何成为天猫双11预售最大黑马
- 伦敦 quant_伦敦统一用户组(LUUG)见面v1.0
- Objective-C学习篇03—继承
- 如何快速搭建好看的个人博客(完整配置与源码)
- 发售近一周 华为nova2s口碑惊人
- Object.entries()方法的使用和实现
- oracle异地容灾备份 英文6,异地容灾备份的方案.doc
- 炸!亚马逊将解散与印度亿万富翁的合资企业;eBay推迟公布2021年Q2财报;TikTok在英国进行测试电商功能…|洞悉跨境
- 【信息安全】屁股决定脑袋的COSO内控框架,一篇对COSO的趣评 [转贴]