Java规范明确表示:yeld和sleep不一定会强制刷新工作内存读取主存
保证100%可见性: volatile,synchronized,final(在定义时就要赋值且无法修改)
线程池
**池: 目的就是让某些对象得到重复利用,减少频繁创建和销毁对象带来的开销问题(这些对象可以重复利用).
数据库连接池: 创建和销毁数据库的连接池就是一个比较耗时的操作,每当一个连接调用close方法终止后,表示用户不在使用此连接,就回收连接到连接池中(同一个连接可以被用户使用多次,减少了创建连接和销毁连接的系统开销).
线程池: 内部创建好了若干个线程,这些线程都是runnable,只需要从系统中取出任务(run),就可以立即执行,线程池最大的好处就是减少每次启动和销毁线程的损耗.
JDK线程池的使用
线程池的工作流程
常见锁策略
乐观锁和悲观锁
乐观锁: 每次读写数据认为不会发生冲突,线程不会阻塞,只有在线程更新时才会检查是否发生冲突,若没有冲突,直接跟新,只有冲突才解决冲突问题,当冲突不严重的时候可以采用乐观锁策略来避免加锁解锁操作
悲观锁: 每次去读写数据都会冲突,每次在数据读写时都会上锁(互斥),保证同一时间段只有一个线程在读写数据