Java高级学习-线程池和Lambda表达式

网友投稿 527 2022-05-30

线程池

线程通信,避免多线程对同一共享变量的争夺。

等待与唤醒机制,wait – notify

wait-- notify 必须由同一个锁对象调用

Java高级学习-线程池和Lambda表达式

wait-- notify 属于Object类的方法

wait-- notify 必须要在同步代码块或者同步函数中使用

等待与唤醒机制

线程复用,让线程完成任务之后再继续进行其他任务。

线程池:容器—>集合(ArrayList,HashSet,LinkedList,HashMap)

创建多个线程时,保存到一个集合中,使用线程时候,将线程冲集合中取出来。

List集合:Thread t = list.remove(0) :返回的时被移除的元素(线程只能被一个任务使用)。

LinkedList集合:Thread t = linked.removeFirst();

使用完线程,将线程归还 : list.add(t) linked(t)

JDK1.5之后有内置线程,直接使用

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

Executors类中的方法:static ExecutorService newFixedThreadPool( int nThreads ):创建一个可重用的固定线程数的线程池。

nThreads :线程数量

返回值:ExecutorService接口,返回的是ExecutorService的实现类,可以使用ExecutorService接口接收(面向接口编程)

java.util.concurrent.ExecutorService:线程池接口,继承了Executor接口(注意区分Executor接口和Executors工厂类)

从线程池获取线程,调用start方法,执行线程任务。

提交Runnable任务用于执行:submit( Runnable task )

销毁线程池:void shutdown( )

步骤:

newFixedThreadPool生成线程池

ExecutorService es = Executors.newFixedThreadPool( 2 );

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

使用submit方法,传递线程任务(实现类),开启线程,执行run方法

es.submit(new Runnable的实现类名); //匿名对象

shutdown销毁线程池,不建议执行

Lambda表达式

面向对象思想:做一件事情,找到一个解决这个事情的对象,调用对象的方法,完成事情。

函数式编程思想:只关心结果,不关心过程

匿名内部类:new Thread( new Runable( ) { @Override pubilc void run**( )** { XXX } } ).start( );

Lambda表达式:new Thread( ( ) -> { XXX } ).start( );

小括号就是run方法的参数(无);小箭头代表将参数传递到后面的代码;后面的输出语句为业务逻辑代码。

简化匿名内部类

( 参数列表 ) -> { 重写方法的代码 }

( ) :接口中抽象方法的参数列表,多个参数使用逗号分隔

{ } : 重写接口中抽象方法的方法体

Lambda表达式:可推导,可省略

(参数列表):参数列表的数据类型,可以省略不写

(参数列表):参数列表的参数只有一个,类型和()都可以省略

(一些代码):如果{ } 中的代码只有一行,无论是否有返回值,都可以省略 ( {},return,分号),要一起省略。

使用Lambda表达式必须具有接口,且接口中只有一个抽象方法。例如:Runnable,Comparator

Lambda表达式必须有上下文推断。方法的参数或者局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口实例

Java 任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:#化鲲为鹏,我有话说#鲲鹏生态构建
下一篇:【转载】全球前十大云计算专利所有者名单出炉:华为第八
相关文章