Live My Life

淡而无味也是一种味道

[JUC] 3.3 ArrayBlockingQueue 和 LinkedBlockingQueue

Java 并发容器

ArrayBlockingQueue 概述 ArrayBlockingQueue,顾名思义:基于数组的阻塞队列。数组是要指定长度的,所以使用 ArrayBlockingQueue 时必须指定长度,也就是它是一个有界阻塞队列。(有界是指他的容量大小是固定的,不能扩充容量,在初始化时就必须确定队列大小。) 它实现了 BlockingQueue接口,有着队列、集合以及阻塞队列的所有方法。它内部使用......
JUC

[JUC] 3.2 Java 并发容器 -- 队列

Queue 队列总结

简介 Queue(队列):一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。 每个元素总是从队列的 rear 端进入队列,然后等待该元素之前的所有元素出队之后,当前元素才能出对,遵循先进先出(FIFO)原则。 下面是 Queue 类的继承关系图: 图中我们可以看到,最上层是 Coll......
JUC

[JUC] 3.1 Java 并发容器

Java 并发容器

Java 在 1.5 版本之前所谓的线程安全的容器,主要指的就是 同步容器,当然因为所有方法都用 synchronized 来保证互斥,串行度太高了,性能太差了。因此 Java 在 1.5 及之后版本提供了性能更高的容器,我们一般称为 并发容器。 并发容器虽然数量非常多,但依然是前面我们提到的四大类:List、Map、Set 和 Queue。 并发容器关系图。 List CopyOnWri......
JUC

[JUC] 2 Java 集合容器

Java 集合

Java 中的容器主要可以分为四个大类,分别是 List、Map、Set 和 Queue。其中又可以分为 同步容器 和 并发容器,那么除了这两类容器外,剩下我们可以把它归类为 集合容器(暂且这么分类)。今天我们就来简单复习下 Java 中的集合类。 Java 中的集合包括三大类,它们是 Set(集)、List(列表)和 Map(映射),它们都处于 java.util 包中,Set、List......
JUC

[JUC] 1 Java 容器

同步容器和并发容器

Java 中的容器主要可以分为四个大类,分别是 List、Map、Set 和 Queue,但并不是所有的 Java 容器都是线程安全的。说到线程安全的问题,我们先来理解两个名词 同步容器 和 并发容器。 同步容器 在 Java 中,同步容器主要包括 2 类: Vector、Stack、HashTable Vector 实现了 List 接口,Vector 实际上就是一个数组,和 Array......
JUC

[JDK8] 3 方法引用与构造方法引用

方法引用与构造方法引用

方法引用 什么是方法引用 当要传递给 Lambda 体的操作,已经有实现的方法了,可以使用方法引用。 方法引用可以看做是 Lambda 表达式深层次的表达。换句话说,方法引用就是 Lambda 表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是 Lambda 表达式的一个语法糖。 要求:实现接口的抽象方法的参数类列和返回值类型,必须与方法引用的方法的参数列表和返回值......

[JDK8] 2 函数式接口

函数式接口

什么是函数式(Functional)接口 只包含一个抽象方法的接口,称为函数式接口 你可以通过 Lambda 表达式来创建接口的对象。(若 Lambda 表达式抛出一个受检异常 – 即:非运行时异常,那么该异常需要在目标接口的抽象方法上进行声明)。 我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。同时 javadoc 也会包含......

[JDK8] 1 Lambda 表达式

Lambda 表达式

Lambda 表达式简介 Lambda 是一个简洁匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java 的语言表达能力得到了提升。 Lambda 表达式的应用范围 Lambda 表达式本质:作为函数式接口(只有一个抽象方法的接口)的实例,Lambda 表达式和方法引用,只能用在函......

[Thread] 4 线程创建新增方式(JKD 5.0)

JKD 5.0 线程创建新增方式

新增方式一:实现 Callable 接口 与使用 Runnable 相比,Callable 功能更强大些 相比 run() 方法,可以有返回值 方法可以抛出异常 支持泛型的返回值 需要借助 FutureTask 类,比如获取返回结果 Future 接口 可以对具体 Runnable、Callable 任务的执行结果进行取消、查询是否完成、获取结果等。 FutureTask 是 Futu......

[Thread] 3 线程的通信

线程的通信

假设一个场景 需求:使用两个线程打印 1-100。线程1、线程2交替打印。 涉及到三个方法 wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。 notify():一旦执行此方法,就会唤醒被 wait() 的一个线程。如果有多个线程被 wait(),就唤醒优先级高的那个。 notifyAll():一旦执行此方法,就会唤醒所以被 wait() 的线程。 12345678......