![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java8
菜瓜_牛顿
枪如惊雷,照一身肝胆
展开
-
Java8 StampedLock
1、 该锁的提出是针对ReentrantReadWriteLock的,认为读和写相遇的操作是少数的,如果在读操作多写操作少的情况写使用ReentrantReadWriteLock,那写入线程可能有饥饿现象(写线程迟迟无法竞争到锁而一直处于等待状态)2. 三种模式(写,读,乐观)StampedLock有版本和模式组成,锁获取方法返回一个long型的票据stamp,如果是0表示没有写锁被授权访原创 2017-03-29 17:07:23 · 223 阅读 · 0 评论 -
Stream API---终止操作
以下几种常用的Stream终止操作,map-reduce模式比较常用,collect比较强大1、allMatch, anyMatch,noneMatch 匹配三个方法均返回 booleanallMatch---检查是否匹配所有元素anyMatch----检查是否匹配任意元素 noneMatch---检查是否没有匹配所有元素还是以employee类为例,增加一个属性 枚举stat原创 2017-04-06 21:49:02 · 2672 阅读 · 0 评论 -
线程创建2---Callable和Future
1.Callable接口Callable接口Java 5新增的一种具有类型参数的泛型,它的参数类型和call()返回的类型相同,call方法可以有返回值可以抛出异常。Callable接口不是Runnable的子接口,所以它不能直接作为Thread 的target,而且call方法不是直接调用,而是被线程体调用。2.Future模式理解:我有一个任务,我提交给Future,Futur原创 2017-03-21 17:38:06 · 573 阅读 · 0 评论 -
Java8---Lambda表达式规则
1.lambda表达式首先需要函数式接口的支持常见的函数式接口Runnable Callable Consumer等,也可以自定义函数式接口声明方法 public 返回值 function( 输入参数, 接口)调用时 function(输入参数,接口的lambda表达式)/* * 一、Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操作符称为原创 2017-04-05 20:30:57 · 900 阅读 · 0 评论 -
Java8---Lambda函数编程练习
1、依据Collection.sort对员工类进行排序(先按年龄排序,在按姓名排序)public class Run { public static void main(String[] args){ List emps = Arrays.asList( new Employee( "张三", 18, 9999.99), new Employee("李四", 59,原创 2017-04-05 21:48:00 · 884 阅读 · 1 评论 -
Java8--并行流
1.还记得Java7中的Fork/Join模式吗(工作窃取算法),在例子中计算了1到100亿的和http://blog.csdn.net/u012813201/article/details/69553580而Java8直接通过并行流就可以简单实现,代码简单,且速度更快。public class Run { public static void main(String[] arg原创 2017-08-17 22:48:45 · 282 阅读 · 0 评论 -
Java8---Optional避免空指针异常
Stream API的返回值如果有可能为空,就返回Optional原创 2017-08-17 22:54:37 · 1643 阅读 · 0 评论 -
Java8对HashMap和ConcurrentHashMap的改进
Java8为何比Java7速度更快,从底层数据结构开始说起1.HashMap在Java7中,HashMap采用的是数组+链表的形式存储的,(默认bucket数目16,负载因子0.75)具体见HashMap那么依照原HashMap,假设bucket=12的数组对应的链表中有10个元素(此时负载仍没超过0.75,10/16)那么在查找该bucket的过程中最坏的情况是要比原创 2017-04-05 15:10:27 · 1506 阅读 · 0 评论 -
ConcurrentHashMap JDK1.8
《Java源码分析》:ConcurrentHashMap JDK1.8最近一直在看关于J.U.C中的源码,了解原子操作,了解锁机制,了解多线程并发等等。但是ConcurrentHashMap一直拖着到今天才算告一段落。点击打开链接也要感谢ConcurrentHashMap这个类,刚开始就是想弄懂里面的工作原理,但是,无奈看了网上关于介绍ConcurrentHashMap原创 2017-08-18 09:36:43 · 543 阅读 · 0 评论 -
Stream ApI--3.map,flatmap
1.Map(中间操作)接收Lambda表达式,对每一个元素转换成其他形式或提前信息,接受一个函数作为参数,该函数会被用到每个元素上,并将其映射成一个新的元素。map的参数十一个Function接口,简单的说map就是类型转换 T->R,该接口的抽象函数 R apply(T t) 比如讲一个字符串的小写转大写再比如对员工数组中的每个成员工资 这里可以利用方法引用Stre原创 2017-04-06 18:08:06 · 613 阅读 · 0 评论 -
Stream API---2.中间操作
1.过滤 filter :惰性求值接收一个lambda表达式,过滤掉某些元素,留下复合要求的(1)对于任何流的操作,首先都要先创建流,这里通过List的stream方法创建流。(2)任何中间操作都是惰性求值:都只是刻画出了Stream,没有产生新的集合,也就是说,,多个中间操作构成的流水线只有在触发终止操作时会一次性全部处理,否则中间操作执行任何处理。(3)在Stream中多次转换原创 2017-04-06 14:27:13 · 364 阅读 · 0 评论 -
Java8---接口
1、Java7接口多个抽象方法静态常量2、Java8接口默认方法 和类方法(二者不破坏从函数接口的特性)内部类 内部接口 内部枚举(默认都是采用public static来修饰)之所以增加默认方法和类方法的原因,我猜函数式接口只允许有一个抽象方法,但Java7很多接口不止一个方法,为了兼容性又不破坏函数式接口的特性,所以引入默认方法和类方法。这两种方法调用还是和之前一样,原创 2017-04-07 19:48:28 · 306 阅读 · 0 评论 -
Java8---lambda初映象
1.理解函数式编程:对行为进行抽象,传入的不是对象而是行为,思考问题时,不可变值和函数-->函数将值映射成另外一个值逗号隔离参数列表,->,语句块[java] view plain copy Runnable noArg=()->System.out.println("没有输入参数的Runnable接口noArg");原创 2017-04-05 10:15:13 · 280 阅读 · 0 评论 -
Java8---2.函数接口的默认方法和静态方法
1.注解FunctionInterface因为函数接口是只有一个方法的接口,指定编译器检查,该接口只有一个抽象方法,是函数接口(只允许一个抽象方法,但是可以有默认方法和静态方法)@FunctionalInterfacepublic interface Functional { void method();}不过有一点需要注意,默认方法和静态方原创 2017-04-05 11:21:58 · 461 阅读 · 0 评论 -
Java8---隐示final
捕获和非捕获的Lambda表达式当Lambda表达式访问一个定义在Lambda表达式体外的非静态变量或者对象时,这个Lambda表达式称为“捕获的”。比如,下面这个lambda表达式捕捉了变量x:int x = 5; return y -> x + y;为了保证这个lambda表达式声明是正确的,被它捕获的变量必须是“有效final”的。所以要么它们需要用final修饰符号标记,要么保原创 2017-04-05 13:30:57 · 643 阅读 · 0 评论 -
Java8---底层内存结构方法区
方法区:jvm运行时内存区域主要分为:程序计数器,jvm栈,本地方法栈,堆,方法区。jvm规把方法区描述为堆的逻辑结构(即永久区PermGen)但是他还有个别名,叫Non-Heap(非堆),目前情况除了Oracle-sun- hotspot还采用永久区以外,Oracle-JRockit,IBM-J9以及国内阿里的jvm,都不存在永久区的概念,而Hotspot也逐渐消除永久区,jdk1原创 2017-04-05 15:53:39 · 6245 阅读 · 1 评论 -
逐步优化看出Java8的强大
1、Java8的核心是lambda编程和Stream API下面通过一个例子讲明Java8的强大2.类employee 包含{private String name; private int age ; private double salary;}三个属性,构造器和get set方法省略需求:a.输出年龄>35的员工信息 b.输出工资>5000的员工信息 c.原创 2017-04-05 20:08:35 · 565 阅读 · 0 评论 -
Java8---5.方法引用
1、方法引用如果lambda体中调用的方法是已经有的,就可以使用方法引用方法引用形式: (1)对象名::实例方法名; (2)类名::静态方法名;(3)类名::实例方法名;方法引用的注意事项:(1)引用的方法的参数和返回值必须和函数式接口中的抽象方法保持一致,比如Supplier中的get和Student类中的getName() 两个方法都是无参返回String的(2)若Lamb原创 2017-04-06 09:32:36 · 378 阅读 · 0 评论 -
6.Stream API---1创建
1.StreamJava8的核心之一就是强大的Stream API,那么Stream是什么的,就是一种和数据有关的流,一般过程:首先将数据源转化成Stream;然后对Stream进行一些列中间操作,比如可以过滤 可以映射 可以截取 ;最后得到一个新流。注意:流的操作不会改变数据源,只是依照中间过程产生一个新的流而已,原有的数据源并没有更改。2.Stream操作的主要分为三原创 2017-04-06 10:49:41 · 511 阅读 · 0 评论 -
java8:Stream例子
1.//在 7 中,要发现 type = grocery 的所有交易,然后返回以交易值降序排序好的交易 ID 集合List<Transaction> groceryTransactions = new Arraylist<>();for(Transaction t: transactions){ if(t.getType() == Transaction.GRO...原创 2018-10-29 21:59:54 · 485 阅读 · 0 评论