07 2019 档案
摘要:并发编程中,`ReentrantLock`的使用是比较多的,包括之前讲的`LinkedBlockingQueue`和`ArrayBlockQueue`的内部都是使用的`ReentrantLock`,谈到它又不能的不说AQS,AQS的全称是`AbstractQueuedSynchronizer`,这个类也是在`java.util.concurrent.locks`下面,提供了一个FIFO的队列,可以用于构建锁的基础框架,内部通过原子变量`state`来表示锁的状态,当`state`大于0的时候表示锁被占用,如果state等于0时表示没有占用锁,`ReentrantLock`是一个重入锁,表现在`state`上,如果持有锁的线程重复获取锁时,它会将`state`状态进行递增,也就是获得一个信号量,当释放锁时,同时也是释放了信号量,信号量跟随减少,如果上一个线程还没有完成任务,则会进行入队等待操作。
阅读全文
摘要:为了避免频繁重复的创建和销毁线程,我们可以让这些线程进行复用,在线程池中,总会有活跃的线程在占用,但是线程池中也会存在没有占用的线程,这些线程处于空闲状态,当有任务的时候会从池子里面拿去一个线程来进行使用,当完成工作后,并没有销毁线程,而是将将线程放回到池子中去。
阅读全文