如何添加lambda的6个帮助函数
外层函数的定义?
外层函数的定义?
所谓的外层函数的定义如下
1. 嵌套函数,是指在另一个函数里面定义的一个函数。外层的函数,这里简称为外层函数。
2. 函数的嵌套可以是多层嵌套。嵌套函数可以看到其全部的外层函数的非局部变量。在实际程序中,嵌套的层数一般很少。下面是一个三层嵌套的例子, innerOfInner 也可以访问在 outer 函数体重定义的变量 x 。
3. 嵌套函数对非局部变量拥有读和写的权限。
4. 如果一个嵌套函数可以逃离外层函数,例如函数是第一公民,并且内嵌的函数被传到另外一个函数作为参数或者被当做返回值,那么,就会产生一个闭包 ( closure ),通过调用逃离的函数,可以访问函数的原本的环境变量。此时,外层函数的框架 ( frame )会继续存在,直到所有指向此框架的闭包消失。闭包所指向的非局部变量会从栈内存被移到堆内存。
5. Javascript 支持嵌套函数。Java 通过 Lambda 表达式,内部类,匿名类来间接支持内置函数。
例子,add 是外层函数,plus 是嵌套函数。counter 对于 add 来说是局部变量,对于 plus 来说则是非局部变量 ( non-local variable )。在一个外层函数 add 的函数体里面,定义了一个嵌套函数 plus ,然后调用嵌套函数,并返回结果。
Java中如何用Thread类实现多线程?
1.回答下你的问题,继承Thread类并调用start方法就可以实现多线程了。
其实Java中实现多线程的方式有三种方式继承 Thread类,实现Runnable接口、实现Callable接口。
前两种没有返回值,后一种带返回值。说到多线程就把线程相关的都说下。
2、什么是线程
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,而多个线程共享进程申请的内存。
一个进程中可以启动多个线程。比如java运行一个程序就会启动一个进程,进程至少会启动main线程和垃圾回收线程。
线程总是属于某个进程,与进程内的其他线程一起共享分配给该进程的所有资源,但是线程有自己独立的栈。
Java的线程又分为普通线程和守护线程,像垃圾回收线程就是守护线程。
3、线程的状态
new:线程对象已经创建,还没有调用start方法
runnable start0方法调用时,线程进入该状态。 wait/block/sleep/running也会转到该状态
running runnable的线程执行就会进入该状态
休眠状态:包括wait/blocksleep,线程因为某个条件不再执行了,但是等待某个件事件出现,可能返回到 runnable状态
dead:异常或者run方法执行完成达到的状态
4、线程同步
既然是多线程,就要注意线程安全问题。
解决线程安全问题,就需要加锁。Java提供了 synchronized和lock来实现线程同步的问题(Lock的实现这里就不说了,后面可以分享下)。
5、线程通信
Object的wait/notify方法,Condition的await和signal方法, BlockingQueue的实现类,
concurrent包下面的Semaphore、 CyclicBarrier CountDownLatch都可以实现线程通信,这里就不详解了
6、线程池
线程池可以参考我分享的关于 ThreadPoolExecutor的文章
7、其他
ThreadLocal volatile这两个东西也是线程使用经常需要的,大家可以了解下
基本上线程使用的就这些,希望对你有帮助。
可以关注我,后续会把涉及到的知识点通过源码的方式分析下。