自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 可重入锁 ReentrantLock AQS 源码解析

使用范例Lock lock = new ReentrantLock();lock.lock();try { dosomething();} finally { lock.unlock();}在finally块中释放锁,目的是保证在获取到锁之后,最终能够被释放。接口结构Lock是个顶级接口,构建了锁的生态环境void lock();获取锁。如果该锁不可用,则出于线程调度目的,当前线程将被禁用,并处于休眠状态,直到获得该锁为止void lockInterru

2020-12-11 23:22:42 326 2

原创 JAVA 线程池ThreadPoolExecutor源码阅读与分析

线程池是什么提前创建好若干个线程,如果有任务需要处理,这些创建好的线程就会开始处理任务,处理完之后线程并不会被销毁而是被保存起来,而是等待下一个任务。为什么需要线程池创建和销毁线程都是消耗系统资源的。线程模型又分为用户线程,与内核线程。用户线程ULT用户程序实现的,不依赖系统核心,应用自己管控线程,不需要进行用户态/内核态的切换。操作系统内核无感知。内核线程KLT系统内核管控,内核保存上下文状态和信息,多处理器情况上能并发运行,线程的创建于同步由内核完成,能够调度CPU资源。一个小测试

2020-12-09 00:47:31 308 2

原创 循环依赖的解决

是什么循环依赖,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:代码中的体现@Componentpublic class A { // A中注入了B @Autowired private B b;}@Componentpublic class B { // B中也注入了A @Autowired private A a;}解决循环依赖的本质先去缓存Map里找Bean,没有则

2020-12-23 16:41:30 448

原创 FactoryBean的使用

FactoryBean的用法在某些情况下,实例化bean过程比较复杂,如果还是采用配置的方法,需要在中提供大量的配置信息,配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。Spring为此提供了一个FactoryBean的工厂类接口,用户可以通过实现该接口定制实例化bean的逻辑。public interface FactoryBean<T> { T getObject() throws Exception; Class<?> get

2020-12-21 17:31:54 769 1

原创 Condition 源码学习

Condition 解析

2020-12-16 16:20:12 185

原创 ReentrantReadWriteLock 源码学习

是什么读写锁在同一时刻可以允许多个读线程访问,但是写线程操作时,所有的读线程和其他写线程均被阻塞。使用例子public class LockTest { private static ReadWriteLock lock = new ReentrantReadWriteLock(); /** * 读取资源 */ public void read() throws InterruptedException { lock.readLock().

2020-12-15 20:29:11 141

原创 volatile关键字 可见性 有序性 原子性 内存语义

理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步class VolatileFeaturesExample { volatile long vl = 0L; // 使用volatile声明64位的long型变量 public void set(long l) {...

2020-12-09 22:51:03 239

原创 JAVA retry 使用

简介retry不是关键字他是一个标记有点类似于goto,goto是Java中的保留字,在目前版本的Java中没有使用。retry后面跟循环,标记这个循环开始的位置。后续在continue或者break后面加retry。continue retry从这个标记的循环继续执行,不是重新开始,而是继续执行。break retry跳过这个标记的循环break retry 例子public static void main(String[] args) { retry: for

2020-12-07 19:00:06 148

原创 Java线程池简单使用学习

常用的五种类型线程池newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutornewScheduledThreadPoolnewWorkStealingPoolnewFixedThreadPool定长线程池,控制线程最大并发数,超出的任务会在队列中等待。public static void main(String[] args) { ExecutorService pool = Executors.newFixedTh

2020-12-07 16:34:21 193

原创 多线程学习之线程的创建与终止

线程的几种创建模式通过实现Runnable接口来创建Thread线程:public class Main { public static void main(String[] args) { MyThread task = new MyThread(); Thread thread = new Thread(task); thread.start(); } static class MyThread implements Runn

2020-12-06 16:44:18 215

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除