函数式编程(Functional Programming)是把函数作为基本运算单元,函数可以作为变量,可以接收函数,还可以返回函数。历史上研究函数式编程的理论是Lambda演...
函数式编程(Functional Programming)是把函数作为基本运算单元,函数可以作为变量,可以接收函数,还可以返回函数。历史上研究函数式编程的理论是Lambda演...
1. 责任链 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 责任链模式(C...
1. 适配器 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式是Adapter,也称Wrapper,是指如果...
1.工厂方法 工厂方法的目的是使得创建对象和使用对象是分离的,并且客户端总是引用抽象工厂和抽象产品: 不过,一般情况我们是使用静态方法(静态工厂方法)返回: 静态工厂方法广泛...
1.介绍 Maven就是是专门为Java项目打造的管理和构建工具,它的主要功能有: 提供了一套标准化的项目结构; 提供了一套标准化的构建流程(编译,测试,打包,发布……); ...
获取线程名称 Thread.currentThread().getName()可以获取当前执行的线程名称。 对象传递 Java标准库提供了一个特殊的ThreadLocal,它...
ForkJoin Java 7开始引入了一种新的Fork/Join线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行。举个例子:如果要计算一个超大数组的和,...
线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待状态。如果有新任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,新任务要么放入队列等待,要么增加一个新线...
java.util.concurrent 是 Java 并发编程的核心包,自 Java 5 引入,提供了一系列强大且高效的并发工具,大大简化了多线程编程的复杂度。 Concu...
Semaphore保证同一时刻最多有N个线程能访问,比如同一时刻最多创建100个数据库连接,最多允许10个用户下载等。最多允许3个线程同时访问: 也可以使用tryAcquir...
ReadWriteLock 一般情况,我们更希望允许多个线程同时读,但只要有一个线程在写,其他线程就必须等待,就需要使用ReadWriteLock来实现。 只允许一个线程写入...
1.介绍 从Java 5开始,引入了一个高级的处理并发的java.util.concurrent包,它提供了大量更高级的并发功能,能大大简化多线程程序的编写。使用Reentr...
1.线程同步锁 当有多个线程同时操作同一个变量时就需要用到锁。 它表示用Counter.lock实例作为锁,两个线程在执行各自的synchronized(Counter.lo...
1.创建新线程 要创建一个新线程非常容易,我们需要实例化一个Thread实例,然后调用它的start()方法,下面提供三种方式创建: 从Thread派生一个自定义类,然后覆写...
JUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。 1.主要特点 轻量级:不需要复杂的配置即可使用。 自动化测试:支持 @Test注解实现测...
从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有: 本地日期和时间:LocalDateTime,LocalDate,LocalTime; ...
Java标准库有两套处理日期和时间的API: 一套定义在java.util这个包里面,主要包括Date、Calendar和TimeZone这几个类; 一套新的API是在Jav...
Reader Reader是Java的IO库提供的另一个输入流接口。java.io.Reader是所有字符输入流的超类,它最主要的方法是: 这个方法读取字符流的下一个字符,并...
读取classpath资源 把资源存储在classpath中可以避免文件路径依赖;在classpath中的资源文件,路径总是以/开头,需要先获取当前的Class对象,然后调用...
ZipInputStream是一种FilterInputStream,它可以直接读取zip包的内容: 另一个JarInputStream是从ZipInputStream派生,...