2018年8月


撰写于    浏览:331 次  分类: Java8基础知识
一、Stream是什么?Stream是数据通道,用于操作数据源(集合、数组等)所生成的元素序列。注意:(1)Stream不会存储元素。(2)Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。(3)Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。Stream操作的三个步骤:创建Stream:一个数据源(如[...]

撰写于    浏览:638 次  分类: Java8基础知识
2018年9月7日,补充:《lambda实战》一、Lambda是什么?Lambda是一个匿名函数,我们可以把Lambda理解为是一段可以传递的代码。可以写出简洁、灵活的代码。作为一种更紧凑的代码风格,使java的语言表达能力得到提升。二、Lambda表达式语法Lambda表达式在java语言中引入了一个新的语法元素和操作符。这个操作符为"->[...]

撰写于    浏览:2439 次  分类: 多线程与并发,一针见血20点
本文修订于2018年9月5日在Java中,通过下面的代码,我们可以很容易地获取到系统可用的处理器核心数目:Runtime.getRuntime().availableProcessors();基本原则是:应用程序的最小线程数应该等于可用的处理器核数。具体场景又分为以下两种情况:(1)如果所有的任务都是计算密集型的,则创建处理器可用核心数那么多个线程[...]

撰写于    浏览:38305 次  分类: 多线程与并发
创建线程的两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任[...]

撰写于    浏览:257 次  分类: 多线程与并发
无论是Semaphore还是CountDonwLatch或者是CyclicBarrier,其实我们都可以通过Lock接口+Condition条件队列功能来模拟实现,但是不够抽象所以才出现了AQS这个抽象的面向开发者同步框架,比如这个Semaphore,我们看下如果使用Lock实现:import java.util.concurrent.locks.[...]

撰写于    浏览:173 次  分类: 多线程与并发
Semaphore是Java里面另外一个基本的并发工具包类,主要的的作用是用来保护共享资源的访问的,也就是仅仅允许一定数量的线程访问共享资源。Semaphore维护了有限数量的许可证,只有得到了许可证的线程才能进行共享资源的访问,如果得不到许可证,说明当前共享资源的访问已经达到最大限制,所以会挂起当前线程,直到前面的线程处理完任务之后,把许可证归还[...]

撰写于    浏览:184 次  分类: 多线程与并发
以参加展会为例,大厅保安负责人数控制,进入的成员发放准入证,出来的成员收回准入证。大厅保安:import java.util.concurrent.Semaphore; public class GuardLicense { private Semaphore licenses; public GuardLicense(int co[...]

撰写于    浏览:234 次  分类: 多线程与并发
Java8 lambda版本:import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit;[...]

撰写于    浏览:30827 次  分类: 多线程与并发
本文修订于:2018年9月7日Semaphore,读[ˈseməfɔ:(r)],是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。简单的用法如下所示:import java.util.Random;[...]

撰写于    浏览:367 次  分类: 多线程与并发
在Java内存模型中说过,为了性能优化,编译器和处理器会进行指令重排序;也就是说java程序天然的有序性可以总结为:如果在本线程内观察,所有的操作都是有序的;如果在一个线程观察另一个线程,所有的操作都是无序的。在单例模式的实现上有一种双重检验锁定的方式(Double-checked Locking)。代码如下:public class Single[...]