概述

Type是Java编程语言中所有类型的通用超级接口。 这些包括原始类型,参数化类型,数组类型,类型变量和基本类型。

阅读全文 »

概述

Condition意为“条件”,在多线程运行的情况下,不同的线程等待在不同的Condition下,其它拥有这个Condition锁的线程能够唤醒阻塞在这个Condition上的线程,这和Object.wait()以及Object.notify()方法阻塞和唤醒线程的机制一样,调用Object.wait()方法的线程必须拥有这个对象的monitor,同样调用Condition的await方法的线程也需要获取一把Lock(java.util.concurrent.locks.Lock),就好比将Lock类比成synchronized关键字,将Condition类比成对象的monitor。Condition借助Lock实现了java原生的wait/notify机制。

阅读全文 »

概述

CountDownLatch意为倒计数,它是基于AQS实现的一种共享锁机制的并发工具类,用来控制一个或多个线程需要等待其它多个线程执行完成后再执行。例如a线程正在执行一个需要两个参数的任务,而获取这两个参数是两个很耗时的操作,利用多线程机制可以开启两个线程去获取参数最终将结果汇总给a线程,利用Thread的join方法可以实现这个功能,同样CountDownLatch也能实现这个功能,相比于join方法它对线程能够更为细致的控制以及更加直观的操作。

阅读全文 »

概述

AbstractQueuedSynchronizer(以下简称AQS)意为队列同步器,提供了用于实现先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量,事件等)的基础。它是juc中很重要的一个类,ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore、ThreadPoolExecutor都是基于AQS实现的。

阅读全文 »

概述

平时在开发的过程中我们经常会借助第三方jar包来完成我们的功能。我们在maven的pom文件中写好这些jar包的groupId、artifactId以及version,这些jar包就能够自动下载到我们的本地maven仓库,然后我们就能在代码中引用这些第三方jar包中的类了,其实这些第三方jar包是存放在maven的中心仓库中的,这样大家就能统一去这个中央仓库下载它们。本章将要介绍如何将我们自己写好的jar包发布到中央仓库中供其他人下载引用。

阅读全文 »

概述

mysql8.0之后新增了with语法,也被称作为公用表表达式(CTE),它是一个临时命名的结果集,仅在单个语句的执行范围内存在,并且在后续的sql中可以重复使用这个结果集。同时CTE分为递归CTE和非递归CTE。CTE的出现简化了复杂查询语句的编写,提高了sql性能。

阅读全文 »

概述

在多线程运行的情况下,对共享资源的读写操作往往会和我们预料的结果不一致。这时候我们就需要对共享资源的访问做一些限制,比如写线程之间需要互斥,读线程跟写线程需要互斥,读线程之间不用互斥。这就好像将共享资源锁住了一样,互斥的操作同一时刻只允许一个线程访问。实现这种锁的方法有很多种,在合适的场景使用合适的锁算法往往可以提高程序的运行效率。

阅读全文 »

概述

LockSupport类是基于Unsafe实现的用来阻塞和唤醒线程的工具类,它和wait,notify方法在功能上是相似的,只不过LockSupport提供了更为直观的阻塞线程语义以及能够精确的唤醒具体哪个线程,而notify只能随机唤醒某个线程。

阅读全文 »

概述

ReentrantLock意为重入锁,它是基于AQS实现的一种独占锁,在java中另一个可重入独占锁就是我们常见的synchronized关键字,拥有这两种锁的线程都能重复进入获取锁的对象的代码或者方法中不被阻塞,并且是独占被锁资源的。同时ReentrantLock提供了synchronized所没有的许多特性,并且提供了更好的性能。当我们需要对并发做出更为细致的控制时,可以选择使用ReentrantLock来替代synchronized。

阅读全文 »