多线程
创建线程
继承Thread类重写run方法
实现Runnable接口重写run方法
实现Callable<T>接口重新call方法
返回类型Future<T>
可以在线程执行完成后得到结果
Thread类方法
对象方法
start() - 启动线程
setPriority(int)/getPriority() - 设置/获取优先级<br>
setDaemon(boolean) - 设置守护线程(后台线程)
interrupt() - 中断线程
join() - 等待该线程结束
静态方法
sleep(long) - 线程休眠
yield() - 让出cpu,暂停现在执行其他线程
currentThread() - 获得正在执行的线程
线程同步
什么时候同步
存在临界资源(多线程访问同一个对象)
对资源的访问是互斥的(排他的)
如何同步
锁种类与概念
互斥锁/读写锁
偏向锁/轻量级锁/重量级锁
synchronized<br>(synchronized(this/obj/Class))
wait()
notify()
notifyAll()
lock
ReetrantLock<br>(通过AQS的来实现线程调度)<br>(互斥锁、独享锁)
lock() - 加锁
unlock() - 释放锁
trylock() - 尝试获得锁
ReadWriteLock - 读写锁<br>(read共享锁,write独享锁)<br>
并发工具类
CountDownLatch - 倒计数器
CyclicBarrier - 循环循环栅栏计数器
LockSupport - 线程阻塞工具类
Semaphore - 信号量
Exchange - 用于线程间交换数据
线程通信
基于线程调度的通信
wait() - 线程暂停等待
notify()/notifyAll() - 唤醒等待的线程
Condition(ReentrantLock)
await() - 线程等待
signal()/signalAll() - 唤醒等待的线程
awaitUnInterruptify()
awaitUtil(Date)
awaitNanos(long)
线程池
用空间换时间,实现创建好多个线程放入池中,节省创建和销毁线程时间上的开销
创建线程池子
Executors工具类(返回ExecutorService)
newSingleThreadExecutor()<br>
newCachedThreadPool()<br>
newFixedThreadPool(int) <br>
newScheduledThreadPool<br>
自定义线程池ThreadPoolTaskExecutor
CorePoll
MaxPool
RejectedExecutionHandler
ExecutorService
execute(Runnable) - 启动线程分配任务
submit(Callable<T>) - 启动线程分配任务
Funture<T> 可获取执行结果
shutsown() - 等待线程池中线程执行完毕关闭线程池
shutdownNow() - 立刻关闭线程池并返回等待执行的线程
isterminated() - 是否执行完所有线程
线程的几种状态
NEW - 新建(new)
WAITING - 等待(start)
RUNNABLE - 运行/就绪(获取cpu资源后)
BLOCKED - 阻塞/冻结
TIME-WAITING - 超时等待,超时自动返回
TERMINATED - 销毁(run结束或调用stop())
泛型/容器(集合框架)
容器
Collection<E>
list<T>
ArrayList
LinkedList
Set<T>
HashSet
重写equal
重写hashcode
TreeSet
Map<K,V>
HashMap<K,v>
键值类必须重写hashcode和equals
TreeMap<K,v>
键值必须comparable接口的子类
容器的遍历
for-each
Iterator<T> 迭代器
并发容器
ConcurrentHashMap:并发版HashMap
CopyOnWriteArrayList:并发版ArrayList
CopyOnWriteArraySet:并发Set
ConcurrentLinkedQueue:并发队列(基于链表)<br>
ConcurrentLinkedDeque:并发队列(基于双向链表)
ConcurrentSkipListMap:基于跳表的并发Map
ConcurrentSkipListSet:基于跳表的并发Set
阻塞队列
DelayQueue:延时队列<br>
LinkedTransferQueue:基于链表的数据交换队列
SynchronousQueue:读写成对的队列
LinkedBlockingDeque:阻塞队列(基于双向链表)
PriorityBlockingQueue:线程安全的优先队列
LinkedBlockingQueue:阻塞队列(基于链表)
ArrayBlockingQueue:阻塞队列(基于数组)
实用工具类
Collections
binarySearch - 折半查找
sort
copy
emptyXXX() -得到空容器
max / min
replaceAll()
reverse
shuffle
org.apache.commons.io.FileUtils
deleteDirectory:删除文件夹
readFileToString:以字符形式读取文件内容
deleteQueitly:删除文件或文件夹且不会抛出异常
copyFile:复制文件
writeStringToFile:把字符写到目标文件,如果文件不存在,则创建
forceMkdir:强制创建文件夹,如果该文件夹父级目录不存在,则创建父级
write:把字符写到指定文件中
listFiles:列举某个目录下的文件(根据过滤器)
copyDirectory:复制文件夹
forceDelete:强制删除文件
org.apache.commons.io.FilenameUtils
getExtension:返回文件后缀名
getBaseName:返回文件名,不包含后缀名
getName:返回文件全名
concat:按命令行风格组合文件路径(详见方法注释)
removeExtension:删除后缀名
normalize:使路径正常化
wildcardMatch:匹配通配符
seperatorToUnix:路径分隔符改成unix系统格式的,即/
getFullPath:获取文件路径,不包括文件名
isExtension:检查文件后缀名是不是传入参数(List<String>)中的一个
org.apache.commons.lang.StringUtils
isBlank:字符串是否为空 (trim后判断)
isEmpty:字符串是否为空 (不trim并判断)
equals:字符串是否相等
join:合并数组为单一字符串,可传分隔符
split:分割字符串
EMPTY:返回空字符串
trimToNull:trim后为空字符串则转换为null
replace:替换字符串
org.springframework.util.StringUtils
hasText:检查字符串中是否包含文本<br><br>hasLength:检测字符串是否长度大于0<br><br>isEmpty:检测字符串是否为空(若传入为对象,则判断对象是否为null)<br><br>commaDelimitedStringToArray:逗号分隔的String转换为数组<br><br>collectionToDelimitedString:把集合转为CSV格式字符串<br><br>replace 替换字符串<br><br>delimitedListToStringArray:相当于split<br><br>uncapitalize:首字母小写<br><br>collectionToDelimitedCommaString:把集合转为CSV格式字符串<br><br>tokenizeToStringArray:和split基本一样,但能自动去掉空白的单词
org.apache.commons.lang.ArrayUtils
contains:是否包含某字符串<br><br>addAll:添加整个数组<br><br>clone:克隆一个数组<br><br>isEmpty:是否空数组<br><br>add:向数组添加元素<br><br>subarray:截取数组<br><br>indexOf:查找某个元素的下标<br><br>isEquals:比较数组是否相等<br><br>toObject:基础类型数据数组转换为对应的Object数组
org.apache.commons.lang3.ArrayUtils
contains:是否包含某个字符串<br><br>addAll:添加整个数组<br><br>clone:克隆一个数组<br><br>isEmpty:是否空数组<br><br>add:向数组添加元素<br><br>subarray:截取数组<br><br>indexOf:查找某个元素的下标<br><br>isEquals:比较数组是否相等<br><br>toObject:基础类型数据数组转换为对应的Object数组
org.apache.commons.codec.digest.DigestUtils
md5Hex:MD5加密,返回32位字符串<br><br>sha1Hex:SHA-1加密<br><br>sha256Hex:SHA-256加密<br><br>sha512Hex:SHA-512加密<br><br>md5:MD5加密,返回16位字符串
org.apache.commons.collections.CollectionUtils
isEmpty:是否为空<br><br>select:根据条件筛选集合元素<br><br>transform:根据指定方法处理集合元素,类似List的map()<br><br>filter:过滤元素,雷瑟List的filter()<br><br>find:基本和select一样<br><br>collect:和transform 差不多一样,但是返回新数组<br><br>forAllDo:调用每个元素的指定方法<br><br>isEqualCollection:判断两个集合是否一致<br><br>
org.apache.commons.beanutils.PropertyUtils
getProperty:获取对象属性值<br><br>setProperty:设置对象属性值<br><br>getPropertyDiscriptor:获取属性描述器<br><br>isReadable:检查属性是否可访问<br><br>copyProperties:复制属性值,从一个对象到另一个对象<br><br>getPropertyDiscriptors:获取所有属性描述器<br><br>isWriteable:检查属性是否可写<br><br>getPropertyType:获取对象属性类型
org.apache.commons.lang3.StringEscapeUtils
unescapeHtml4:转义html<br><br>escapeHtml4:反转义html<br><br>escapeXml:转义xml<br><br>unescapeXml:反转义xml<br><br>escapeJava:转义unicode编码<br><br>escapeEcmaScript:转义EcmaScript字符<br><br>unescapeJava:反转义unicode编码<br><br>escapeJson:转义json字符<br><br>escapeXml10:转义Xml10<br><br>
org.apache.commons.beanutils.BeanUtils
copyPeoperties:复制属性值,从一个对象到另一个对象<br><br>getProperty:获取对象属性值<br><br>setProperty:设置对象属性值<br><br>populate:根据Map给属性复制<br><br>copyPeoperty:复制单个值,从一个对象到另一个对象<br><br>cloneBean:克隆bean实例
java语法进阶
Java中关于try、catch、finally中的细节分析
命名规范
正则表达式
创建正则表达式
pattern.compile(正则字符串,[int])
使用正则表达式
Pattern.matcher方法
完全匹配 Matcher.matches
局部匹配 Matcher.find
String类提供的方法
matches(正则)
replaceAll
split
replaceFirst
正则符号
特殊符号
.
^
$
\d - 数字
\w - 字母数字下划线
\s - 空白字符
\b - 单词边界
两次重复
*
?
+
(n,m)
(n,)
(n)
分组
()
(exp)匹配并捕捉文本到自动命名组里面
(?<name>exp) 匹配exp并捕捉文本到名为name的组里
(?:exp)匹配但不捕获文本
位置指定
(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置
(?!=exp)匹配后面不是exp的位置
(?<!exp)匹配前面不是exp的位置
惰性量词(单尽可能少)
*?
+?
??
(n,m)?
(n,)?
java8新特性
Stream - 流
collect - 收集数据
收集
汇总
counting
summingInt ,summingLong ,summingDouble
averagingInt,averagingLong,averagingDouble
summarizingInt,summarizingLong,summarizingDouble<br>
取最值
joining 连接字符串
groupingBy 分组
example
多级分组
List分组归类
partitioningBy 分区
并行
filter(T -> boolean)
example
sorted() / sorted((T, T) -> int)
example
distinct() - 去重复
limit(long n)
skip(long n) - 去除前几个
example
anyMatch(T -> boolean) - 是否有一个元素匹配给定的 T -> boolean 条件<br>
example
allMatch(T -> boolean) -是否所有元素都匹配给定的 T -> boolean 条件
noneMatch(T -> boolean) - 是否没有元素匹配给定的 T -> boolean 条件
findAny() 和 findFirst()
reduce((T, T) -> T) 和 reduce(T, (T, T) -> T)
example
count()
collect()
数值流
流转换为数值流
数值流转换为流
数值流方法
sum()<br>max()<br>min()<br>average() 等...
数值范围
注意点
转换成stream流后只能使用一次
效率问题
Operational
isPresent() :值存在时返回 true,反之 flase
get() :返回当前值,若值不存在会抛出异常
orElse(T) :值存在时返回该值,否则返回 T 的值
日期-时间 API
LocalDate类
获取当前日期以及年、月、日
获取指定的日期<br>
比较两个时间的先后顺序以及是否相等
对日期做加减运算
获取日期间隔的天数
LocalTime类
获取当前时间以及自定义时间
比较两个时间的先后顺序
对时间做加减运算
LocalDateTime类
获取当前日期时间以及自定义日期时间
转化为日期和时间