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

线程池

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

等待与唤醒机制,wait – notify

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

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( )

步骤:

  1. newFixedThreadPool生成线程池

    ExecutorService es = Executors.newFixedThreadPool( 2 );

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

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

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

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

Lambda表达式

函数式编程

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

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

Runnable创建线程

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

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

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

格式

简化匿名内部类

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

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

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

Lambda表达式省略

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

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

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

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

使用前提

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值