高级财务助手不见了,跳不出来
584
2022-05-30
线程池
线程通信,避免多线程对同一共享变量的争夺。
等待与唤醒机制,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( )
步骤:
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小时内删除侵权内容。